【问题标题】:time difference april - march wrong value时差 4 月 - 3 月 错误值
【发布时间】:2012-10-02 11:15:07
【问题描述】:

我正在尝试使用以下函数获取一个月的范围:

static public function getMonthRange($month, $year)
{
    $date = DateTime::createFromFormat('d-m-Y','01-'.$month.'-'.$year);
    $start = $date->getTimestamp();

    return array(
        'start' => $start,
        'end' => $date->modify('first day of next month')->getTimestamp()
    );
}

现在除了行军之外,这一切正常。当我通过使用 ((end - start) / 60 / 60 / 24) 计算每月的天数来检查这些值时,我发现 3 月是 30.958333333333 天,而其他月份给出了正确的天数。

我决定自己在这样的计算中输入日期:

$march = ((strtotime('2012-04-01') - strtotime('2012-03-01')) / 60 / 60 / 24); //30.95833..
$april = ((strtotime('2012-05-01') - strtotime('2012-04-01')) / 60 / 60 / 24); //30
$may =   ((strtotime('2012-06-01') - strtotime('2012-05-01')) / 60 / 60 / 24); //31

它仍然给了我错误的三月天数。我的方法有问题吗?更重要的是;我该如何解决这个问题?

提前致谢。

【问题讨论】:

  • 你在什么语言环境下运行这个? 3 月份的 DST 是否对您有所改变?

标签: php date datetime timestamp


【解决方案1】:

三个字:夏令时。

三月少了一个小时。

另外,您的函数存在于 PHP 中:http://php.net/manual/en/function.cal-days-in-month.php

【讨论】:

  • 啊当然...谢谢。但是,我使用的函数返回 2 个时间戳,一个月的开始和结束,cal_days_in_month 只返回天数(这不是我想要做的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2021-08-30
  • 2017-04-10
  • 1970-01-01
相关资源
最近更新 更多