【问题标题】:Unix timestamp before 1970 (even before 1700), using PHP1970 年之前(甚至 1700 年之前)的 Unix 时间戳,使用 PHP
【发布时间】:2011-05-13 01:03:17
【问题描述】:

如何处理 01.01.1970 之前的日期?

我需要获取从 1700 年开始的月份的第一天。

我怎样才能做到这一点?

提前谢谢你!

【问题讨论】:

  • 你能提供一个输入数据和预期结果的例子吗?
  • 这个日期是儒略历还是公历?
  • 您可能使用的是旧版本的 PHP。 PHP4 必须死。 5.1 之后的 PHP 版本没有 1970 年的限制。自 1901 年以来已更改。

标签: php timestamp


【解决方案1】:

您可以使用DateTime

例子:

<?php
$d = new DateTime("1780-06-01");
echo $d->format("l"); //Thursday

但是,您应该考虑到公历在世界各地的不同时刻是adopted

【讨论】:

  • DateTime 是未来。 +1。请注意,您需要 PHP 5.3 才能享受 DateTime 的一些优点(Intervals、CreateFromFormat 等)。如有疑问,手册会告诉您所需的版本
  • DateTime 在任何情况下都不能早于 1901。 $date = new DateTime('1869-01-01 07:00:00'); echo $date->format('U'); setTimestamp(-3187208524); echo $date->format('Y-m-d H:i:s');
  • @vee 在这里工作 (5.5.9)。也许您正在使用 32 位构建的 PHP?尝试将时间戳作为浮点数传递 (-3187208524.)。
  • @vee 您不能使用 1970 年之前的 Unix 时间戳,它没有被定义。如果它有效,那是巧合,但结果可能不正确。看我的回复stackoverflow.com/a/69959602/15809
【解决方案2】:

尝试使用Zend Date 类,或更旧的PEAR Date

【讨论】:

    【解决方案3】:

    如果年份

    -- 开放组,单一 Unix 规范,基本定义(4:一般概念)

    如您所见,没有定义 1970 年之前的 Unix 时间戳如何映射到日期。它只为以后的日期定义。

    如果您想查看 1970 年之前的日期,则需要始终使用实际日期,例如 ISO 日期 (2008-12-31T23:59:59)。您可以使用 DateTime 类来表示您能想到但曾经从 Unix 时间戳创建的任何日期,或者如果年份在 1970 年之前,则将其转换为 Unix 时间戳,因为这只会产生未定义的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 2020-11-23
      • 1970-01-01
      相关资源
      最近更新 更多