【问题标题】:Date difference won't work, datetime object日期差异不起作用,日期时间对象
【发布时间】:2019-02-25 01:34:26
【问题描述】:

我正在尝试获取年、月、日、小时和周中的 2 个日期之间的差异。

但是当我这样做时,对象会使页面崩溃。

$row['timedate'] 是数据库中的 DateTime 列

$content_date = $row['timedate'];
$content_date = (new DateTime($content_date))->format('Y-m-d H:i:s');

$now_date = (new DateTime('now'))->format('Y-m-d H:i:s');

$since_start = $content_date->diff($now_date);

echo $since_start->days . ' days total<br>';
echo $since_start->y . ' years<br>';
echo $since_start->m . ' months<br>';
echo $since_start->d . ' days<br>';
echo $since_start->h . ' hours<br>';
echo $since_start->i . ' minutes<br>';
echo $since_start->s . ' seconds<br>';

如果我回显 $content_date 它等于 2019-02-25 01:44:51

如果我回显 $now_date 它等于 2019-02-25 02:29:32

谁能告诉我为什么这不起作用?

【问题讨论】:

    标签: php datetime


    【解决方案1】:

    如果您想使用DateTime::diff 方法,则不应将$content_date$now_date 格式化为字符串。相反,将它们保留为 DateTime 对象:

    $content_date = new DateTime($content_date);
    
    $now_date = new DateTime();
    
    $since_start = $content_date->diff($now_date);
    
    echo $since_start->days . ' days total<br>';
    echo $since_start->y . ' years<br>';
    echo $since_start->m . ' months<br>';
    echo $since_start->d . ' days<br>';
    echo $since_start->h . ' hours<br>';
    echo $since_start->i . ' minutes<br>';
    echo $since_start->s . ' seconds<br>';
    

    【讨论】:

    • 嗯这仍然让我的页面崩溃
    • $row['timedate'] 是什么格式?如果代码采用日期可解析格式,则代码可以正常工作:3v4l.org/hm9Lr
    • 是的,我看到它在单个页面上工作 $row['timedate'] 是日期时间列类型,如果我回显 $row['timedate'] 复制输出并放入单个页面您的示例工作正常,嗯
    • @iiiml0sto1 这很奇怪!但很高兴它适用于重写。
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多