Сравнение дат через> и <операторы - PullRequest
2 голосов
/ 04 апреля 2011

По всему моему php-коду я храню даты и время в UTC, но я также использую mysql для хранения даты и времени (также в utc).

есть ли способ, с которым сравнение дат может потерпеть неудачуоператор больше или меньше?

        $curdate=date('Y-m-d H:i:s');
        if($start_datetime>$curdate)

Ответы [ 5 ]

7 голосов
/ 04 апреля 2011

Нет.
Они не могут потерпеть неудачу.
Для этой цели намеренно создан формат даты Mysql.

Нет единственной причины преобразовывать его в любой другой формат всравнить.

3 голосов
/ 04 апреля 2011

PHP: измените дату на UNIX отметку времени, используя strtotime(), и тогда вы сможете сравнить.


MySQL:

измените dataType столбца даты на DateTime, и тогда вы можете сравнить ниже:

$d1 = new DateTime('2008-08-03 14:52:10');
$d2 = new DateTime('2008-01-03 11:11:10');

var_dump($d1 == $d2);
var_dump($d1 > $d2);
var_dump($d1 < $d2);
0 голосов
/ 04 апреля 2011

Я предпочитаю сравнивать «Секунды с эпохи Unix (1 января 1970 г., 00:00:00 по Гринвичу)».Конечно, это хорошо только для дат в / после 1970 года.

Учитывая, что $ date1 и $ date2 - две переменные даты для сравнения:

if (date("U",$date1) > date("U",$date2)) {
  // $date1 is more recent than $date2
} else {
  // $date1 is older than (or equal to) $date2
}
0 голосов
/ 04 апреля 2011

Прямое сравнение даты и времени не будет неудачным. Вы можете сделать это.

Сравнение временных меток будет быстрее, но я не думаю, что такое микро-улучшение производительности было бы чем-то, что нужно искать в php-приложении, плюс вам придется учитывать ошибку 2030 года.

0 голосов
/ 04 апреля 2011
strtotime($curdate) < strtotime($start_datetime)

strtotime () возвращает int, представляя секунды, прошедшие с 01.01.1970 Это означает, что если дата $ curdate равна «2011-01-01 12:00:00», а $ start-datetime - «2011-01-01 12:00:01», то $ start-datetime больше, чем $ curdate, поскольку возвращается strtotime целое число для $ start-datetime, которое на единицу больше, чем $ curdate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...