【问题标题】:How can I work with dates before 1900 in PHP?如何在 PHP 中处理 1900 年之前的日期?
【发布时间】:2011-01-27 19:24:06
【问题描述】:

我正在使用 PHP 和 jQuery 构建一个交互式时间轴,它需要显示 1500 年到 2020 年之间的日期。我通常在处理日期时使用 PHP 的 strtotime 函数,但它不适用于 1900 年之前的日期。

日期将来自 MySQL 数据库,并被格式化为字符串,例如“January 31, 1654”(这可能不是理想的格式,但我无法更改它们的存储方式)。我正在使用 PHP 来解析日期,基本上将它们转换为像素值,这些像素值决定了它们在时间轴上的显示位置。

解析这些历史日期最简单的方法是什么?

【问题讨论】:

    标签: php date unix-timestamp


    【解决方案1】:

    DateTime 类在这里可能会有所帮助 (quoting):

    日期的每个组成部分(例如年份)是 内部存储为 64 位数字,因此 所有可以想象的日期(包括 负年份)得到支持。


    但请注意:

    • 它只存在于 PHP >= 5.2
    • 几种方法只存在于 PHP >= 5.3

    所以:如果您在 PHP 5.3 上进行开发并希望您的软件与 PHP 5.2 兼容,请注意您使用的方法


    另一种解决方案(尤其是,如果在您的应用程序中使用 Zend Framework) 将是 Zend_Date 组件 (quoting):

    尽管 PHP 5.2 文档声明,“ 时间戳的有效范围是 通常从 1901 年 12 月 13 日星期五开始 格林威治标准时间 20:45:54 至 2038 年 1 月 19 日星期二 格林威治标准时间 03:14:07," Zend_Date 支持 几乎无限的范围,在帮助下 BCMath 扩展

    【讨论】:

      【解决方案2】:

      使用美妙的Carbon Library,过去的日期不是问题:

      $date = Carbon::now();
      $date->subCenturies(23);
      echo $date->format('Y-m-d');
        // -0282-03-15
      

      这适用于人类存在的日期。对于其他所有事情,使用日期(按 AC/BC 刻度设置的日期和月份)没有多大意义。

      【讨论】:

        猜你喜欢
        • 2014-05-19
        • 2013-05-26
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 2010-12-11
        • 1970-01-01
        相关资源
        最近更新 更多