比较PHP中的两个ISO8601日期字符串

oom*_*pah 13 php

我需要在PHP脚本中比较(实际排名/排序)日期.日期是ISO-8601日期格式即

YYYY-MM-DD

我写了一个比较函数,它分割日期并按年/月/日进行比较.但是,这似乎有点矫枉过正,我可以轻松地做一个简单的字符串比较,如:

if ($date1 < $date2)
   // do something
elseif( $date1 > $date2)
   //do something else
else
   //do yet another thing
Run Code Online (Sandbox Code Playgroud)

我的假设是关于(ISO-8601)日期字符串比较是否正确 - 即我可以摆脱我的功能(在服务器上保存几个时钟周期),还是明确更安全地在自定义函数中进行比较?

chx*_*chx 20

http://en.wikipedia.org/wiki/ISO_8601#General_principles

日期和时间值按从最重要到最不重要的方式进行组织:年,月(或周),日,小时,分钟,秒和秒的分数.因此,表示的字典顺序对应于时间顺序,除了涉及负年份的日期表示.这允许日期自然地按例如文件系统排序.

继续进行字符串排序.如果维基百科还不够,那肯定是http://www.ietf.org/rfc/rfc3339.txt,在那里搜索strcmp.

  • +1 RFC参考,虽然您也许应该列出警告.*"假设日期和时间的时区相同(例如,全部以UTC表示),使用相同的字符串表示(例如,所有"Z"或全部"+00:00"),并且所有时间都有相同数量的小数位数,则日期和时间字符串可以按字符串排序(例如,使用C)中的strcmp()函数"* (3认同)

Pek*_*ica 8

如果您将日期转换为DateTime对象(通常可从PHP 5.2+获得),则无论格式如何,您都可以可靠地使用比较.

$date = new DateTime("YYYY-MM-DD");
$date2 = new DateTime("YYYY-MM-DD");

if ($date > $date2)  .....
Run Code Online (Sandbox Code Playgroud)


Ale*_*ruk 6

如果您有两个 ISO 8601 格式的日期,那么是的,您可以将它们作为字符串进行比较。此解决方案具有最佳性能:

Test name       Repeats         Result          Performance     
string          10000           0.031393 sec    +0.00%
strcmp          10000           0.040579 sec    -29.26%
strtotime       10000           0.149791 sec    -377.15%
DateTime        10000           0.184489 sec    -487.68%
Run Code Online (Sandbox Code Playgroud)

测试源在这里