【问题标题】:PHP date time greater than todayPHP 日期时间大于今天
【发布时间】:2015-12-15 00:52:15
【问题描述】:

请帮助我的代码有什么问题?它总是返回今天的日期大于 '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';
}

P.S: 01/02/2016 来自数据库。

【问题讨论】:

  • 使用时间戳来比较日期。如您所见,字符串对于该任务非常不可靠。

标签: php date


【解决方案1】:

没有比较日期。您正在比较 字符串。在字符串比较的世界中,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';
}

Demo

或者

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

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

Demo

【讨论】:

  • $date_now = new DateTime(); $sql = "UPDATE jrf_tbl SET strifoverdue ='no' WHERE strduedate > '$date_now'";
  • strioverdue 是 VARCHAR 类型。如何将其转换为日期并执行我的查询?泰!!
  • 对不起,我的意思是 strduedate 是 VARCHAR 类型,意思是我比较字符串和日期。我不知道如何将 strduedate 转换为 m/d/Y 格式的 DATE 类型
  • 发生了什么使“2016-01-02”成为可比较的日期格式?将 '2016-01-02' 转换为 int 或 float 会返回 2016。然而,('2016-01-02'
  • 我想这就是解释。 PHP 没有强制转换字符串。它比较字符串 stackoverflow.com/a/17371819 中的每个字符
【解决方案2】:

我们可以将日期转换为时间戳进行比较

<?php

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

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

?>

【讨论】:

    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多