【问题标题】:why strotime returns negative value in php?为什么 strotime 在 php 中返回负值?
【发布时间】:2010-08-12 15:44:46
【问题描述】:

我正在使用 strtotime 将日期转换为 unixtime 时间戳。 年份、日期和日期作为编码的不同值,我使用下面的代码来生成时间戳。

$year  = '1961';
$month = '2';
$day   = '15';

$date  = $year."-".$month."-".$day;

echo strtotime($date);

上面的代码为我打印:-27648000。如果年份高于 1970 年,它会打印出积极的结果。如果有人可以帮助我,我仍在学习时间戳。主要目的是将日期转换为 unix 时间戳。

问题是为什么它会给出负面结果,我编码它不好!?我也试过mktime,结果还是一样。

谢谢, 天美

【问题讨论】:

  • @Everyone :感谢您的快速回复。这真的会帮助我更多地了解时间戳。谢谢。
  • @Everyone :这让我更加好奇,所以有没有办法在 1901 年之前获取时间戳,我尝试使用 strtotime,但它总是返回 0。有没有办法获取以前日期的时间戳?

标签: php date strtotime mktime


【解决方案1】:

这与 Unix 纪元有关。

请参阅:date()time()

时间戳的有效范围通常是从 1901 年 12 月 13 日星期五 20:45:54 GMT 到 2038 年 1 月 19 日星期二 03:14:07 GMT。 (这些日期对应于 32 位有符号整数的最小值和最大值)。但是,在 PHP 5.1.0 之前,此范围在某些系统上限制在 01-01-1970 到 19-01-2038

【讨论】:

  • 感谢您的解释和 php 手册的链接。它确实有助于很好地理解时间戳。 @Everyone,感谢您的时间和对我学习生活的支持。
  • 这让我更加好奇,所以有没有办法获得 1901 年之前的时间戳,我尝试使用 strtotime,但它总是返回 0。有没有办法获取以前日期的时间戳?
  • UNIX 时间戳在 32 位机器上被限制为 32 位整数,因此您的有效范围是 1901-2038 左右。如果您需要更大的范围或迁移到 64 位平台,请改用 php.net/datetime。 (bugs.php.net/bug.php?id=50913)
  • 感谢您的回复。我也环顾四周,发现了一个 ADODB 库,它会给我超出范围的时间戳。 sourceforge.net/projects/adodb/files 。我再次不确定它是如何工作的。只是在这里提一下,所以有人可以得到帮助。谢谢
  • 只是添加到上面的评论中,它来自 zip 的 adodb-time.inc.php 文件对我很有用。
【解决方案2】:

这是预期的行为。

strtotime 返回一个 UNIX 时间戳,即自 1970 年 1 月 1 日以来的秒数(不考虑闰秒)。对于之前的日期,它将返回一个负数。

【讨论】:

    【解决方案3】:

    Unix 时间从 Unix 纪元开始,即 1970 年 1 月 1 日午夜。因此,在此之前的任何日期都将导致返回负值。

    【讨论】:

      【解决方案4】:

      这是一个 Unix 时间戳。 Unix/PHP 基准日期是 1970 年 1 月 1 日 00:00 UST,时间戳以秒为单位。如果为负数,则为基准日期前的秒数;如果为正数,则为秒数

      【讨论】:

        【解决方案5】:

        我还在学习时间戳,

        谷歌unix timestamp -> http://en.wikipedia.org/wiki/Unix_time

        定义为自午夜预言协调世界时 (UTC) 以来经过的秒数 1970 年 1 月 1 日

        【讨论】:

          【解决方案6】:

          http://en.wikipedia.org/wiki/Unix_time

          Unix 时间或 POSIX 时间是用于描述时间点的系统,定义为自 1970 年 1 月 1 日午夜预测协调世界时 (UTC) 以来经过的秒数,不包括闰秒。它被广泛使用,不仅在类 Unix 操作系统中,而且在许多其他计算系统和文件格式中。它既不是时间的线性表示,也不是 UTC 的真实表示(尽管它经常被误认为两者),因为它代表的时间是 UTC,但不代表标准的 UTC 闰秒(例如 1998 年 12 月 31 日 23:59:60 )...

          1970 年 1 月 1 日之前的时间是负值,因为它们发生在 UTC 开始之前。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-01-29
            • 2020-04-01
            • 1970-01-01
            • 2012-08-12
            • 1970-01-01
            • 2021-12-09
            • 2017-11-16
            • 1970-01-01
            相关资源
            最近更新 更多