【问题标题】:Calculate date difference having a large range with PHP使用 PHP 计算具有较大范围的日期差异
【发布时间】:2010-02-02 14:00:00
【问题描述】:

我需要计算从 1708 到今天的 2 个日期之间可能存在的十年数 - 据我所知,PHP 原生函数中的限制是 1970/1901。

谁能给点建议?

谢谢!

【问题讨论】:

    标签: php date datediff


    【解决方案1】:

    如果你有 PHP >= 5.3.0:

    $before  = new DateTime('1708-02-02');
    $decades = $before->diff(new DateTime())->y / 10;
    

    【讨论】:

    • 我坚持使用 5.2 :-( - 但很高兴知道!
    【解决方案2】:

    您可以使用Zend_Date。它是 Zend 框架的一部分,但可以独立使用,您无需安装整个框架即可使用它。如果在您的 PHP 中安装了 bcmath 扩展,它可以使用 1901 年以后的日期。来自 Zend_date 的theory of operation

    这只是可能的,因为 Zend_Date 不限于 UNIX 时间戳或整数值。 BCMath 扩展需要支持超出格林威治标准时间 1901 年 12 月 13 日星期五 20:45:54 至格林威治标准时间 2038 年 1 月 19 日星期二 03:14:07 范围之外的极大日期。此外,由于浮点数据类型和舍入的固有限制,可能会出现微小的数学错误,除非使用 BCMath 扩展。

    我喜欢推荐 Zend 组件,因为它们是经过精心修饰的高质量代码。不过,还有其他解决方案,例如使用mySQL date functions

    【讨论】:

      【解决方案3】:

      我会写一个自定义方法。

      PHP 日期函数基于纪元(1969 年),因此不会有太多帮助。

      如果你只看年份,那就是简单的数学

      较高年份 - 较早年份 = 年份 年 / 10 = 几十年。

      如果您的意思是从 01-10、11-20 偶数的几十年,那么您可以做一些四舍五入。 (将早期日期向上取整,后期向下取整到最接近的 10。

      【讨论】:

      • 不幸的是它必须是准确的日期。不过感谢您的反馈!
      猜你喜欢
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多