PHP日期时间大于今天

67

请帮忙看一下我的代码有什么问题吗?它总是返回今天的日期大于“01/02/2016”,而实际上2016年比2015年要晚。

<?php
$date_now = date("m/d/Y");

$date = date_create("01/02/2016");
$date_convert = date_format($date, "m/d/Y");

if ($date_now > $date_convert) {
    echo 'greater than';
} else {
    echo 'Less than';
}

附言:01/02/2016是来自数据库的数据。


2
使用时间戳来比较日期。字符串在这个任务上非常不可靠,正如你所见。 - Charlotte Dunois
3个回答

183
你没有在比较日期,而是在比较字符串。在字符串比较的世界中,09/17/2015 > 01/02/2016 是因为 09 > 01。你需要将日期放在可比较的字符串格式中,或者比较可比较的DateTime对象。
<?php
 $date_now = date("Y-m-d"); // this format is string comparable

if ($date_now > '2016-01-02') {
    echo 'greater than';
}else{
    echo 'Less than';
}

演示

或者

<?php
 $date_now = new DateTime();
 $date2    = new DateTime("01/02/2016");

if ($date_now > $date2) {
    echo 'greater than';
}else{
    echo 'Less than';
}

演示


$date_now = new DateTime(); $sql = "UPDATE jrf_tbl SET strifoverdue ='no' WHERE strduedate > '$date_now' "; - Nixxx27
strifoverdue 是 VARCHAR 类型。我该如何将其转换为日期并执行我的查询?谢谢! - Nixxx27
抱歉,我的意思是strduedate是VARCHAR类型,这意味着我正在比较字符串和日期。我不知道如何将strduedate转换为m/d/Y格式的DATE类型。 - Nixxx27
什么原因使得“2016-01-02”成为可比较的日期格式?将“2016-01-02”转换为整数或浮点数会返回2016。然而,“('2016-01-02' < '2016-01-03')”是真的。 - billrichards
@JohnConde,是的,这篇文章虽然有点旧,但对我仍然有效。我给你点赞。 - user9437856
显示剩余2条评论

12
我们可以将日期转换为时间戳进行比较。
<?php

    $date_now = time(); //current timestamp
    $date_convert = strtotime('2022-08-01');

    if ($date_now > $date_convert) {
        echo 'greater than';
    } else {
        echo 'Less than';
    }

?>

0

日期可能以不同的格式出现,因此最好在比较之前将它们转换为时间戳。

<?php
 $today = date("Y-m-d"); //Today
 $date = '2022-06-30'; //Date

 if (strtotime($today) > strtotime($date)) {
    echo 'Today is greater than date';
 }else{
    echo 'Today is less than date';
}

如果您解释一下您的代码,那就会更好了。 - Rohit Gupta

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