我正在尝试比较今天和PHP中的给定日期,我得到了一些意想不到的结果。
以下是我的一些输出:
echo time(); // 1315940430
echo strtotime("+20 days", $date_string); // 1730010
echo $date_string; // 2010-9-30
当我尝试这样的事情时:
if (date() > date('Y-m-d', strtotime("+20 days", $date_string)))
{
}
无论$ date_string是什么,检查总是返回true。知道如何解决这个问题吗?
答案 0 :(得分:2)
if (date('Y-m-d') > date('Y-m-d', strtotime("+20 days", $date_string)))
{
}
原因是你的if语句的第二部分在1970
!
这就是它总是返回真实的原因。
请参阅演示:http://codepad.org/tmmuoSXv
代码:
<?php
$date_string = '2010-05-02';
$date_now = date('Y-m-d');
$converted = date('Y-m-d', strtotime("+20 days", $date_string));
echo $date_now.PHP_EOL.$converted.PHP_EOL;
if ($date_now > $converted)
{
echo 'hello'.PHP_EOL;
}
echo 'there'.PHP_EOL;
?>
输出:
2011-09-13
1970年1月21日
你好
那里
你要做的是:
$converted = date('Y-m-d', strtotime("+20 days", strtotime($date_string)));
额外的strtotime
会为您解决所有问题并获得正确的日期: - )
演示:http://codepad.org/Fhnx5er0
演示(如果是假的):http://codepad.org/jsnEMUGI
答案 1 :(得分:1)
将两个日期转换为时间戳(date('U')
)并执行if ($date1 > $date2)
。
答案 2 :(得分:1)
date()
至少采用一个参数(格式)。
试试这个:
if (date('U') > strtotime("+20 days", $date_string)) {
U
格式说明符返回时间戳;就像strtotime();所以你可以直接将它的输出与strtotime的输出进行比较。
这也是一个很好的解决方案:
if (date_create() > date_create($date_string)->modify('+20 days')) {
答案 3 :(得分:0)
您想要比较时间戳:
if (time() > strtotime("+20 days", $date_string))
{
}
答案 4 :(得分:0)
如果你想使用新的日期功能,你也可以尝试这样的事情:
// If $otherday is in the future
if ( (int)date_diff(new DateTime(), new DateTime($otherday))->format("%r%a") > 0 ) {
// ... blah
}
例如:
foreach ( array("1 year", "1 month", "1 week", "1 day", "1 hour") as $adjustment ) {
printf("-/+ $adjustment %d/%d\n",
date_diff(new DateTime(), new DateTime("-$adjustment"))->format("%r%a"),
date_diff(new DateTime(), new DateTime("+$adjustment"))->format("%r%a")
);
}
输出:
-/+ 1 year -365/366
-/+ 1 month -31/30
-/+ 1 week -7/7
-/+ 1 day -1/1
-/+ 1 hour 0/0