【问题标题】:Comparing dates in php having issues比较php中的日期有问题
【发布时间】:2013-12-27 04:40:57
【问题描述】:

我正在尝试将 2 个日期与通常的代码进行比较。

$date1 = date("d/m/Y",strtotime($row['ad_date']));

$date = $_GET['date'];

 if($date1 > strtotime($date)){
   echo ("Yes");
 }else{
   echo ("No");
 }

row['ad_date'] 具有“Y-m-d”格式,$_GET['date'] 具有“d-m-Y”格式。

仅当 $_GET['date']MONTH 小于 $row['date']DAY 时,PHP 才会打印 YES

当我同时回显时,在格式的所有更改之后,格式似乎相同:
13/12/2013 (date1) - 01/12/2013(date)

$_GET['date'] 来自 ui.js jQuery 的日历和 $row['date'] 来自 mysql。

有什么想法吗?

【问题讨论】:

    标签: php jquery mysql date


    【解决方案1】:

    你正在做直接的字符串比较,你应该使用 strtotime 将日期字符串解析为纪元时间,这样你就可以将它们与数值比较进行比较。

    $date1 = strtotime($row['ad_date']);
    $date = strtotime($_GET['date']);
    
    echo "{$row['ad_date']} -> {$date1}<br>";
    echo "{$_GET['date']} -> {$date}<br>";
    
    if($date1 > $date){
        echo ("Yes");
    }else{
        echo ("No");
    }
    

    【讨论】:

    • 如您所见,我在代码的第 1 行中使用 strtotime 到 $row['date'] 并在 if 条件下使用 strtotime 作为日期。
    • date() 返回字符串.. php.net/manual/en/function.date.php strtotime 返回 int
    • 但是您的 $date1 仍然是一个字符串,就像您在 strtotime() 之后执行 date() 一样
    • 嗯,那我该怎么办?还没找到解决办法,抱歉
    • 又是一个问题。现在它仅在日历中的日期与 $row['date'] 的月份相同时打印 No。我复制/粘贴了您的编辑
    【解决方案2】:

    使用 DateTime 对象要容易得多,因为它们具有可比性:

    $date1 = new DateTime($row['ad_date']);
    $date2 = DateTime::CreateFromFormat("d-m-Y",  $_GET['date']);
    if($date1 > $date2){
      echo ("Yes");
    }else{
      echo ("No");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2011-07-30
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多