首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP数据计算

PHP数据计算
EN

Stack Overflow用户
提问于 2008-12-23 11:33:50
回答 11查看 7.4K关注 0票数 2

PHP中计算指定格式的两个日期之间的天数差异的最佳方法(日期格式独立的方法)是什么?

我尝试了以下功能:

代码语言:javascript
复制
function get_date_offset($start_date, $end_date)
{
  $start_time = strtotime($start_date);
  $end_time = strtotime($end_date);
  return round(($end_time-$start_time)/(3600*24));
}

它在linux机器上正常工作,但是当在windows下运行时,strtotime会返回'‘。

编辑

输入日期为mm/dd/yyyy格式,但我想让它接受$format作为参数。

我只需要几天内的不同。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-12-23 14:56:41

如果您不需要或不能使用Zend Framework或梨包,请尝试此功能,我希望这会有所帮助:

代码语言:javascript
复制
function dateDifference($date1, $date2)
{
    $d1 = (is_string($date1) ? strtotime($date1) : $date1);
    $d2 = (is_string($date2) ? strtotime($date2) : $date2);

    $diff_secs = abs($d1 - $d2);
    $base_year = min(date("Y", $d1), date("Y", $d2));

    $diff = mktime(0, 0, $diff_secs, 1, 1, $base_year);

    return array
    (
        "years"         => abs(substr(date('Ymd', $d1) - date('Ymd', $d2), 0, -4)),
        "months_total"  => (date("Y", $diff) - $base_year) * 12 + date("n", $diff) - 1,
        "months"        => date("n", $diff) - 1,
        "days_total"    => floor($diff_secs / (3600 * 24)),
        "days"          => date("j", $diff) - 1,
        "hours_total"   => floor($diff_secs / 3600),
        "hours"         => date("G", $diff),
        "minutes_total" => floor($diff_secs / 60),
        "minutes"       => (int) date("i", $diff),
        "seconds_total" => $diff_secs,
        "seconds"       => (int) date("s", $diff)
    );
}
票数 6
EN

Stack Overflow用户

发布于 2008-12-23 11:54:28

PEAR Date类提供了各种特性,用于查找日期之间的差异以及大约1000个其他事物。它的文档是在这里..。

票数 4
EN

Stack Overflow用户

发布于 2008-12-23 11:53:21

PHP的问题在于它没有明确的DateTime类型。您可以使用Unix时间戳或内置的DateTime类,但它们的功能非常有限。我希望有一些第三方类,更广泛地支持日期时间计算,但我还没有找到它。

使用Unix时间戳进行日期(而不是时间)计算也很棘手。您必须放弃时间部分,但简单地重置到00:00是不安全的,因为夏时制(DST)。DST的效果是,每年有两天的时间不完全是24小时。因此,在加/减日期时,可能会得到一个与3600*24不相等的值。

我建议找一个第三方阶级,有适当的支持所有这些东西。日期/时间计算在其丑陋之处是令人敬畏的。:P

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/388673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档