用PHP比较日期

时间:2011-09-13 19:11:33

标签: php

我正在尝试比较今天和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。知道如何解决这个问题吗?

5 个答案:

答案 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

请参阅date_diffDateInterval以及DateInterval::format