【发布时间】:2011-04-04 12:48:26
【问题描述】:
在我的所有 php 代码中,我都以 UTC 格式存储日期和时间,但我也使用 mysql 来存储日期时间(也在 UTC 格式)。
如果使用大于和小于运算符,日期比较是否会失败?
$curdate=date('Y-m-d H:i:s');
if($start_datetime>$curdate)
【问题讨论】:
标签: php datetime comparison timezone
在我的所有 php 代码中,我都以 UTC 格式存储日期和时间,但我也使用 mysql 来存储日期时间(也在 UTC 格式)。
如果使用大于和小于运算符,日期比较是否会失败?
$curdate=date('Y-m-d H:i:s');
if($start_datetime>$curdate)
【问题讨论】:
标签: php datetime comparison timezone
没有。
他们没有办法失败。
Mysql 日期格式就是为此目的而设计的。
没有任何理由将其转换为其他任何格式进行比较。
【讨论】:
PHP:
使用 strtotime() 将日期更改为 UNIX 时间戳,然后您可以进行比较。
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);
【讨论】:
直接日期时间比较不会失败。你可以这样做。
时间戳比较会更快,但我不认为在 php 应用程序中需要寻找这样的性能微小改进,而且您必须考虑到 2030 年的错误。
【讨论】:
我更喜欢比较“自 Unix 纪元以来的秒数(格林威治标准时间 1970 年 1 月 1 日 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
}
【讨论】:
strtotime($curdate) < strtotime($start_datetime)
strtotime() 返回一个表示自 1970 年 1 月 1 日以来经过的秒数的整数 这意味着如果 $curdate 日期是 "2011-01-01 12:00:00" 并且 $start-datetime 是 "2011-01-01 12:00:01" 那么 $start-datetime 大于 $curdate 因为 strtotime 返回$start-datetime 的整数,正好比 $curdate 大一。
【讨论】: