Як я можу перевірити, чи поточна дата / час минула встановлену дату / час?


115

Я намагаюся написати сценарій, який перевірить, чи минула поточна дата / час 05/15/2010 at 4PM

Як я можу використовувати функцію дати () PHP для здійснення цієї перевірки?

Відповіді:


228

Оскільки PHP> = 5.2.2, ви можете використовувати DateTimeклас як такий:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

Рядок, переданий конструктору DateTime , аналізується відповідно до цих правил .


Зверніть увагу, що також можна використовувати timeі strtotimeфункції. Дивіться оригінальну відповідь .


6
часова марка має деякі обмеження, і деякі помилки, наприклад, часова марка не може обробляти дату до 1970 року і після 2038 року (див. відповідь Івара Костера)
Steel Brain

1
Ми часто бачимо зловживання новим DateTime () без параметра, якщо ви використовуєте дати UTC (як слід), віддайте перевагу використовувати новий DateTime ("зараз", новий DateTimeZone ("UTC")). Це не дозволить вашому додатку не зрозуміти помилок у датах. я раджу зберігати його у статичній змінній функції, статиці класу чи десь ще у вашому запущеному процесі ...
Loenix

Що робити, якщо у нас вже є об'єкт DateTime, і ми хочемо знати, чи це минуло, оскільки ми не можемо передати об’єкт конструктору DateTime, як ви запропонували? чи слід використовувати його getTimestamp () і порівнювати його з часом ()? @Salman A
користувач4271704

@ user4271704 Це new DateTime('2010-05-15')лише приклад, може бути будь-який об'єкт DateTime, який ви ініціалізували раніше.
Салман

припустимо, що $objectце об'єкт DateTime, який я використовував, if (new DateTime() > $object) {}і він працює неправильно. Але if (time() > $bject->getTimeStamp()) {}працює коректно. @Salman A
user4271704

77

Існує також клас DateTime, який реалізує функцію для операторів порівняння.

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}

1
Яку функцію він виконує для цього?
still_dreaming_1

6

Перевірте strtotimeфункцію PHP, щоб перетворити встановлену дату / час у часову позначку: http://php.net/manual/en/function.strtotime.php

Якщо strtotimeви не можете правильно обробити формат дати / часу ("16:00", ймовірно, буде працювати, але не "в 16:00"), вам потрібно буде використовувати функції string, наприклад, substrдля аналізу / виправлення формату та отримання часової позначки через інша функція, наприклад mktime.

Потім порівняйте отриману часову позначку з поточною датою / часом ( if ($calulated_timestamp > time()) { /* date in the future */ }), щоб побачити, чи встановлена ​​дата / час є минулою чи майбутньою.

Я пропоную прочитати PHP-doc про функції дати / часу і повернутися сюди з деяким вихідним кодом, як тільки ви застрягнете.


дивіться відповідь Івара Костера
Steel Brain

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.