【问题标题】:Comparing dates in the correct formats比较正确格式的日期
【发布时间】:2018-09-25 02:49:52
【问题描述】:

我在试图找到匹配的格式进行比较时遇到了各种各样的问题,我不明白要比较 2 个日期怎么这么难,我想它就在我上面。

我在 MySQL 数据库中有一个日期:2017 年 12 月 20 日

报告日期是:19/01/18(最终将是今天的日期,但我正在测试旧文件)

我只想查找 0-30 天、31-60 天、61-90 天和 91 天以上的日期

我将日期转换为时间戳,以便进行比较 > 或

我尝试转换为 DateTime 并使用 date_sub,但它似乎很复杂......

我要做的就是检查数据库中的日期字符串是否在日期范围之一内,但我很挣扎。

我尝试使用带有“-30 天”的 strtotime 我用 date_sub 尝试了 DateTime

我想我现在真的很困惑,什么都想不通

这是我所拥有的:

        $RO_Date = date_format( date_create_from_format( 'd/m/y',  $RO["RO Date"] ), 'Y-m-d' );
        $todaysDate = date_format(date_create_from_format('d/m/y', '19/01/18'), 'Y-m-d' );// Using date file was sent

        echo $RO_Date;
        echo ' ('.strtotime( $RO_Date).') ';
        echo ' <br> ';
        echo $todaysDate;
        echo ' (' . strtotime($todaysDate) . ') ';
        echo ' <br> ';
        echo ' -30 Days ';
        echo ' (' . date("Y-m-d", strtotime("-30 days", $todaysDate)) . ') ';

        if (strtotime($RO_Date) >= $todaysDate-30 ) :
            echo ':CURRENT<br>';
        elseif (strtotime($RO_Date) >= $todaysDate-60 ) :
            echo ':31-60<br>';
        elseif (strtotime($RO_Date) >= $todaysDate - 90 ) :
            echo ':61-90<br>';
        elseif (strtotime($RO_Date) >= $todaysDate - 120 ) : 
            echo ':90-120<br>';
        else :
            echo ':120+<br>';
        endif;

输出:

2017-12-20 (1513688400) 
2018-01-19 (1516280400) 
-30 Days (1969-12-02) :CURRENT
2018-01-03 (1514898000) 
2018-01-19 (1516280400) 
-30 Days (1969-12-02) :CURRENT
2018-01-05 (1515070800) 
2018-01-19 (1516280400) 
-30 Days (1969-12-02) :CURRENT
2018-01-12 (1515675600) 
2018-01-19 (1516280400) 
-30 Days (1969-12-02) :CURRENT
2018-01-18 (1516194000) 
2018-01-19 (1516280400) 
-30 Days (1969-12-02) :CURRENT
2018-01-18 (1516194000) 
2018-01-19 (1516280400) 
-30 Days (1969-12-02) :CURRENT

【问题讨论】:

  • 这就是为什么您不应该将日期存储为字符串。

标签: php date datetime time strtotime


【解决方案1】:
<?php
    function dateDiff($dateStringFromDB){
    $today     = new DateTime("Now");
    $db_string = new DateTime($dateStringFromDB);
    $days      = $today->diff($db_string)->format('%d'); 

    return $days;
    }
?>

上面的函数计算当前日期与传递给函数的任何日期之间的差异,并返回天数。 例子: 如果 $dateStringFromDB 是 17/04/2018 并且 $today 是 15/04/2018,则返回 $days 的值为 2。

使用:

echo dateDiff($dateStringFromDB);

您现在可以根据需要使用结果。

【讨论】:

    【解决方案2】:
    <?php
        $todaysDate = date_format(date_create_from_format('d/m/y', '19/01/18'), 'Y-m-d' );// Using date 
        $todaysDate = strtotime($todaysDate);
        echo $todaysDate . PHP_EOL;
        $todaysDate = date("Y-m-d", strtotime("-30 days", $todaysDate));
        echo $todaysDate;
    

    输出:

    1516316400

    2017-12-20

    在这一行

    $todaysDate = date("Y-m-d", strtotime("-30 days", $todaysDate));
    

    $todaysDate 需要是时间戳而不是日期字符串,这是错误

    见http://php.net/strtotime

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      相关资源
      最近更新 更多