【问题标题】:PHP Date - Time difference formattingPHP 日期 - 时差格式
【发布时间】:2016-04-04 12:30:52
【问题描述】:

我在数据库中保存了一个日期和时间,格式如下:2016-04-03 12:54:11

基本上,此日期和时间戳表示创建某物的确切日期和时间。我要做的是显示第二个日期和时间,即自第一个时间戳以来的确切天数。

因此,如果数据酶中的时间戳是 2016-04-03 12:54:11 并且今天的日期和时间是 2016-04-04 12:54:11,它将显示:Overdue by: 1 Day

到目前为止我有:

<?PHP $dateCreated = mysql_result(mysql_query("SQL to stored date and time"),0);
                $dateNow = time();

                $dateDifference = abs(strtotime($dateCreated) - strtotime($dateNow));

                $years = floor($dateDifference / (365*60*60*24));
                $months = floor(($dateDifference - $years * 365*60*60*24) / (30*60*60*24));
                $days = floor(($dateDifference - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); ?>

然后:

echo "<strong>Overdue by:</strong> $days Days.";

但是,此代码将仅相隔一天的 2 个日期显示为相隔 14 天。

我们将不胜感激,干杯。

【问题讨论】:

    标签: php mysql date time


    【解决方案1】:

    尝试使用DateTime 对象。他们会让你的生活更轻松。 然后可以通过以下方式实现上述目标:

    $date1 = new DateTime('2016-04-03 12:54:11');
    $date2 = new DateTime('2016-04-04 12:54:11');
    
    $diff = $date1->diff($date2);
    

    $diff 变量将成为一个 DateInterval 对象,它有一个 days 属性来显示两个日期之间的天数。在这种情况下 1,所以你可以这样做:

    echo "Overdue by: " . $diff->days . " days.";
    

    这将输出Overdue by: 1 days.

    附带说明:您应该真的不再使用mysql_ 函数。它们已被弃用多年,在最新的 PHP 版本中不再是 PHP 核心的一部分。因此,此代码将无法在最新的服务器上运行。另见:Why shouldn't I use mysql_* functions in PHP?

    【讨论】:

    • 我知道 mysql_ 函数,我只是在快速创建一些东西来演示:) 不过谢谢!
    【解决方案2】:

    我认为最好的方法是使用 Php DateTime 类让我们这样做。

    试试这个:

    $datetime1 = new DateTime("YOUR_DB_TIMESTAMP");
    $datetime2 = new DateTime("today");
    
    $difference = $datetime1->diff($datetime2);
    
    echo difference->d;
    

    此外,您还可以选择您想要展示差异的方式。

    $diff->format('%R%a days')
    

    参考:

    示例-> Finding the number of days between two dates
    日期时间文档 -> http://php.net/manual/es/class.datetime.php 问候!

    【讨论】:

      【解决方案3】:

      我会使用 DateTime 对象来处理这样的事情,因为它们真的有很大的帮助。

      $dateCreatedObj = DateTime::createFromFormat('Y-m-d H:i:s', $dateCreated);
      $dateNowObj = new DateTime();
      $dateDifference = $dateCreatedObj->diff($dateNowObj);
      echo $dateDifference->format('Overdue by: %a Day');
      

      请注意,这不处理时区、多语言和复数问题。

      【讨论】:

        【解决方案4】:

        Diff 函数返回两个 DateTimeInterface 对象之间的差异。

        你可以尝试使用 DateTime 对象:

        <?PHP $dateCreated = mysql_result(mysql_query("SQL to stored date and time"),0);
                 $dateNow = new DateTime();
                 $dateOther = new DateTime($dateCreated);
                 $interval = $dateNow->diff($dateOther);
                 echo $interval->format('%R%a days');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-02
          • 2013-11-22
          • 2014-02-13
          • 2013-05-24
          • 2015-03-07
          • 2013-01-04
          相关资源
          最近更新 更多