CakePHP 3 - Как проверить, действительна ли дата?

Я читал документацию и нашел это ..

http://book.cakephp.org/3.0/en/core-libraries/time.html#comparing-with-intervals

Но я не могу применить эту функцию "isWithinNext" или я не знаю HAH. Мне нужно знать, действительна ли моя дата, например:

Поле моей таблицы: "token_time_exp" = 2015-02-06 23:17:52 , эта дата истекает через 72 часа или 3 дня.

Что я использую? был в пределах последнего? находится внутриNext? или оба неверны.. Извините, я начал использовать торт на этой неделе! :D

Сохранение token_time_exp:

$user = $this->Users->patchEntity($user,
                        [
                            'mail_temp' => $this->request->data['mail'],
                            'token_mail' => 12345,
                            'token_time_exp' => date("Y-m-d H:i:s")
                        ]);

Предположим, что сегодня 9-й день, а день токена = 6, я полагаю, это вернет true, потому что прошло 72 часа. Верно?

Сейчас проверю, прошло ли 3 дня..

if($users->token_time_exp->isWithinNext(3)){
            debug('Expired');//return true
        }else{
            debug('Valid');//return false
        }   

Не показывать ошибки, это работает, но я думаю, что не знаю, как использовать: \


person TMoraes    schedule 07.02.2015    source источник
comment
Привет, мне нравится, как вы пишете вопрос: D ... Но нам нужно знать, как вы объявляете время, пожалуйста, покажите нам свой код, который показывает объявление времени и как вы вызываете функцию. Показывать ошибки хорошо, если они у вас есть.   -  person Jun Rikson    schedule 07.02.2015
comment
Спасибо: D Я отредактирую! ^^   -  person TMoraes    schedule 07.02.2015
comment
Вы говорите о проверке данных перед их сохранением (т.е. максимальный интервал истечения срока действия = через 3 дня) или о проверке значения, которое было извлечено из базы данных (дата истечения срока действия еще не наступила)?   -  person ndm    schedule 07.02.2015
comment
Да, проверьте значение, полученное из базы данных! Он должен быть действителен в течение 3 дней, иначе пользователям необходимо сгенерировать новый ключ.   -  person TMoraes    schedule 07.02.2015


Ответы (2)


Используя isWithinNext(3), вы проверяете, находится ли token_time_exp между настоящим и 3 в будущем, но когда вы сохраняете token_time_exp пользователя, вы устанавливаете его на текущую дату, поэтому он не будет работать.

Вместо этого вы должны использовать wasWithinLast(3) или сохранить token_time_exp с датой через 3 дня.

person Rogerio Chaves    schedule 08.02.2015

Ваша проверка isWithinNext(3) может не иметь смысла, представьте, что в базе данных существует 5-дневный интервал, он начнет действовать через 2 дня после его установки, а затем будет действителен еще 3 дня. Если это то поведение, к которому вы стремитесь, тогда ваш чек в порядке.

Если вы хотите, чтобы интервал истечения срока действия был больше 3 дней, т. е. вам все равно, истекает ли дата через 1, 2, 3, 4 или 5 дней, вместо этого вы должны использовать

$user->token_time_exp->isPast()

который оценивается как true, когда дата истечения срока действия находится как минимум на 1 секунду раньше (< now), или

!$user->token_time_exp->isFuture()

который оценивается как true, когда дата истечения срока действия равна текущей дате или по крайней мере на 1 секунду раньше (<= now).

person ndm    schedule 08.02.2015
comment
Этих функций, isFuture или isPast, я в документации не нашел.. Это торт 2.х? - person TMoraes; 08.02.2015
comment
@ThiagoMoraes Они предоставлены компанией Carbon, которая \Cake\I18N \Время расширяется. Позже я удалю свой ответ, так как неправильно понял ваш вопрос. - person ndm; 08.02.2015