【问题标题】:PHP find the days until a datePHP查找日期之前的天数
【发布时间】:2013-10-31 10:34:08
【问题描述】:

我必须以时间戳格式(mysql db)查找距离某个日期的天数

$row['date_exp'] format is '2013-12-16 10:00:00';
$datenow = date("Y-m-d");
$diff = (strtotime($row['date_exp']) - strtotime($datenow))/(86400);
$days = sprintf("%02d", $diff);

我的问题是,如果现在的日期是2013-12-01 09:59:00,那么天数是 15 而 datenow 是 2013-12-01 10:01:00 是 14 天。

没有时间的日子,我怎么能有所作为?

【问题讨论】:

  • 请注意,并非所有日子都有 86400 秒。由于 DST 变化,一天也可能是 82800 或 90000 秒,或者由于闰秒,一天可能是 86401 或 86399 秒。
  • mmmhhh 我能解决这个问题吗?

标签: php timestamp calculation date-math


【解决方案1】:

单线:

echo (new DateTime('2019-12-17'))->diff(new DateTime())->days; 

...返回 直到 Dec 17, 2019的天数。

【讨论】:

  • 当然,它没有被格式化为多行,但这是故意的,因为在 PHP 中处理基本日期计算所需的代码量让我疯狂。
【解决方案2】:

使用DateTime 类:

$a = new DateTime('now');
$b = new DateTime('2013-12-16');

$a->diff($b);

返回

DateInterval Object
(
    [y] => 0
    [m] => 1
    [d] => 24
    [h] => 8
    [i] => 3
    [s] => 23
    [invert] => 0
    [days] => 54  // This is what you're looking for?
)

【讨论】:

  • 谢谢。但我不明白如何查看这些日子?可捕获的致命错误:DateInterval 类的对象无法转换为字符串
  • ... $diff = $a->diff($b); echo $diff->days;.
【解决方案3】:

只需去掉日期部分。

$newDate = date("Y-m-d", strtotime($row['date_exp']));

现在它只包含日期组件。你可以用它来比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多