【问题标题】:PHP:find day difference between two date("YmdHis") returePHP:查找两个日期之间的天差(“YmdHis”)退休
【发布时间】:2010-12-12 09:50:30
【问题描述】:

我需要找到与date("YmdHis") 值的天差。假设一个值是:

$previous_date='20101202115755';
$current_date= date("YmdHis");
$day_difference=?????

现在我需要找到两个值之间的唯一天差。他们有什么好心人可以帮助我找到值吗?

【问题讨论】:

标签: php datetime


【解决方案1】:

对于 PHP >= 5.3.0:

$prev = DateTime::createFromFormat("YmdHis", '20101202115755');
$curr = new DateTime();
$diff = $curr->diff($prev);
echo "Difference: ".$diff->days;

【讨论】:

  • 不工作错误:调用未定义的方法 DateTime::createfromformat()
  • 这就是我说“php >= 5.3.0”的原因。
  • +1:这个答案是有效的,并且在给出它的时候,riad 没有指定他所针对的 PHP 版本。
  • 是的,我同意。这个答案是有效的,但由于我使用不同的版本,这就是为什么要寻找另一个解决方案。谢谢@gnud。
【解决方案2】:

只需将您的日期转换为时间戳,然后从 current_date 中减去 previous_date 并除以一天中的秒数。这是一个例子:

$day = 60*60*24;

$now = time();
$target = strtotime('2010-12-24');

$diff = round(($target - $now) / $day);
echo $diff;

如果您想要中间的天数,请将 $diff 减一。

【讨论】:

  • 谢谢它工作正常。但它可以计算 30/31 个月的数字差异吗?
  • 是的。尝试将$target 设置为strtotime('2011-01-01'),你会发现它工作得很好。
  • 一天的秒数不是60*60*24。有时,它是60*60*24 + 1
【解决方案3】:
<?php
$previous_date="201012021157552";
$previous_date_as_time = mktime(
  substr($previous_date, 8, 2),
  substr($previous_date, 10, 2),
  substr($previous_date, 12, 2),
  substr($previous_date, 4, 2),
  substr($previous_date, 6, 2),
  substr($previous_date, 0, 4)
);

$days_between_dates = (time() - $previous_date_as_time) / 86400;

echo $days_between_dates;
?>

【讨论】:

  • 您应该在分配给$days_between_dates 期间添加对floor()round() 的调用,这取决于您的偏好,否则您很可能会得到很长的浮点数。
  • 我知道:)。但我认为这可以通过 riad 来完成,就像他想要的那样 ;-)。
【解决方案4】:

你的格式很奇怪……

  1. 解析它以获取带有strptimemktimeUNIX timestamp

    $d = strptime($previous_date, '%Y%m%d%H%M%S');
    $prev_ts = mktime($d['tm_hour'], $d['tm_min'], $d['tm_sec'], $d['tm_mon'] + 1, $d['tm_mday'], $d['tm_year'] + 1900);
    
  2. 减去时间戳(time() 给出当前时间):

    $diff = time() - $prev_ts;
    
  3. 除以60*60*24 秒得到天数的差异:

    $diff = floor($diff / (60*60*24)); // or round(), ceil() whatever fits best
    

也就是说,如果可能,请尝试不以20101202115755 而是以 UNIX 时间戳存储或获取日期。这样您就不必经历转换的麻烦。

Working DEMO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多