为什么strotime在php中返回负值?

时间:2010-08-12 15:44:47

标签: php date strtotime mktime

我正在使用strtotime将日期转换为unixtime标记。 年份,日期和日期与代码的值不同,我使用以下代码生成时间戳。

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

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

echo strtotime($date);

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

问题是为什么它会给出负面结果,我编码不好!?我也尝试了mktime,但结果仍然相同。

谢谢, Tanmay

6 个答案:

答案 0 :(得分:5)

这与Unix Epoch有关。

请参阅:date()time()

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

答案 1 :(得分:4)

这是预期的行为。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

之后的秒数

答案 4 :(得分:0)

  

我还在学习时间戳,

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

  

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

答案 5 :(得分:0)

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开始之前发生的负值。