PHP:日期大于当前日期

29

我有这段代码:

$curdate = '22-02-2011';

$mydate = '10-10-2011';                     

if($curdate > $mydate)
{
    echo '<span class="status expired">Expired</span>';
}

这将回显"已过期",但不应该,因为$mydate在未来,因此比$curdate小,但PHP只查看前两个数字22和10,而不是整个字符串。我该怎么解决这个问题?

谢谢

7个回答

75

尝试先将它们都转换为时间戳,然后比较这两个转换后的值:

$curdate=strtotime('22-02-2011');
$mydate=strtotime('10-10-2011');

if($curdate > $mydate)
{
    echo '<span class="status expired">Expired</span>';
}

这将把它们转换为自1970年1月1日以来的秒数,因此您的比较应该有效。


3
@Cameron,你不觉得定义一个格式不正确的变量然后再转换成另一种格式有点过度了吗?为什么不直接定义成正确的格式呢? - Your Common Sense
如果我想知道当前日期与我的日期相差不到1个月,该怎么做? - Eli
1
此外,要注意不同的时区,生产服务器可能在与本地主机不同的默认时区上运行。您可以使用以下命令更改默认时区: date_default_timezone_set("Asia/Colombo"); - Dumi Jay

6
问题在于您当前的变量是字符串,而不是时间变量。
试试这个:
$curdate = strtotime('22-02-2011');

$mydate = strtotime('10-10-2011');  

5
$row_date = strtotime($the_date);
$today = strtotime(date('Y-m-d'));

if($row_date >= $today){
     -----
}

欢迎来到Stack Overflow!虽然这段代码片段可能解决了问题,但它并没有解释为什么或者如何回答这个问题。请在您的代码中包含解释,因为这真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您的代码建议的原因。标记者/审核员:对于仅包含代码的答案,请进行负投票,而不是删除! - Scott Weldon

2
$currentDate = date('Y-m-d');

$currentDate = date('Y-m-d', strtotime($currentDate));

$startDate = date('Y-m-d', strtotime("01/09/2019"));

$endDate = date('Y-m-d', strtotime("01/10/2022"));

if (($currentDate >= $startDate) && ($currentDate <= $endDate)) {

    echo "Current date is between two dates";

} else {

    echo "Current date is not between two dates";  
}

1
使用PHP日期/时间类将这些字符串表示转换为您可以直接使用getTimestamp()比较UNIX时间的内容。
如果您确定所有日期都是以此格式表示的,那么您可以将它们切成YYYY-MM-DD,然后进行字符串比较。

1
if(strtotime($curdate) > strtotime($mydate))
{
...
}

-3

非常简单

$curdate = '2011-02-22';
$mydate = '2011-10-10';                     

if($curdate > $mydate)
{
    echo '<span class="status expired">Expired</span>';
}

如果原始数据的日期格式无法更改,那该怎么办呢? - drudge
1
@jnpcl 这将是他一个奇怪的突发奇想!为什么要将正确的格式更改为其他格式呢? - Your Common Sense
@Col. Shrapnel:在我的工作中,我必须处理只以“MMDDYY”格式给出日期的遗留系统。尽管我很想将它们更改为适当的格式,但我无法这样做。有时候你只能被困在一个糟糕的格式中。 - drudge
@Col. Shrapnel:这只是个人经验的证明。楼主并没有说明他可以更改格式。你的回答假设了他可以更改格式。 - drudge
2
@jnpcl 但他已经在代码中定义了它。所以,他必须已经按正确格式定义了它。你把它想得太严重了。放松点,这并不难 :) - Your Common Sense
@Col. Shrapnel:这只是示例代码。假设他每天都会更改名为$curdate的硬编码变量是很愚蠢的。 - drudge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接