任何人都可以建议进行这种比较的最佳方法吗?我需要测试以dd / mm / yyyy格式提供的日期是否小于固定日期,例如01/05/2009 - 我知道我可以使用strtotime将这些转换为unix时间格式,然后进行比较,但是我我很好奇,如果有更快的方法做到这一点 - 非常感谢,只是寻找一个提示,以改善我的代码!
答案 0 :(得分:10)
一种选择就是反转格式 - 创建一个表格
的字符串yyyy/mm/dd
这是一种可排序的格式,因此您只需进行序数字符串比较即可。当然,这意味着您不会检测到无效数据等。
答案 1 :(得分:4)
可能没有更短的代码方式,除非你确定这是一个瓶颈,否则我不会费心去优化它。
然而,只要您确定它将始终是完全相同的格式(包括月和日的2位数和0),您应该能够重新排序字符串以将年份放在第一位,然后是月份,然后是一天,然后只是比较字符串。
但是,我不确定这会比让库转换为unix时间然后比较它们更快。
如果您可以更改存储日期的格式,您可以将它们定义为yyyy / mm / dd,然后只比较字符串。
答案 2 :(得分:1)
我认为您将其转换为Epoch然后进行比较的解决方案与您将要获得的一样快速和干净。
答案 3 :(得分:1)
如果你想改进代码,我建议你使用DateTime类。它已在php 5.2.0中引入(因此,它仍可能不支持所有服务器)
在php 5.3.0中你可以这样写:
$d1 = DateTime::createFromFormat('d/m/Y', '02/03/2009');
$d2 = DateTime::createFromFormat('d/m/Y', '02/05/2009');
$interval = $d1->diff($d2);
echo $interval->format('%R%d days');
答案 4 :(得分:0)
好吧,你可以使用PHP日期类,但我不确定它会比你当前的解决方案更好......
答案 5 :(得分:0)
使用此方法
yearmonthday
你有01.05.2010和03.07.2010
并进行比较:20100501< =或=> 20100703
答案 6 :(得分:0)
$fixedDate = '01/05/2009';
$variableDate = '28/04/2010';
// Now we do our timestamping magic!
$fixedDate = implode('', array_reverse(explode('/', $fixedDate)));
$variableDate = implode('', array_reverse(explode('/', $variableDate)));
if ($variableDate < $fixedDate) // 20100428 < 20090501
{
// there you go
}