2010-08-12 98 views
1

我正在使用strtotime将日期转换为unixtime邮票。 年,日期和日期作为不同的代码值,我使用下面的代码来产生时间戳。为什么strotime在php中返回负值?

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

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

echo strtotime($date); 

上面的代码打印:-27648000对我来说。如果年份在1970年以上,它会打印出正面的结果。我仍然在学习时间戳,如果有人能帮助我。主要目标是将日期转换为unix时间戳。

的问题是,为什么它给了负的成绩,我是不是编码它不好!?我也试过mktime,但结果仍然一样。

感谢, Tanmay

+0

@Everyone:感谢您的快速回复。这真的会帮助我更多地了解时间戳。谢谢。 – jtanmay 2010-08-12 18:52:51

+0

@Everyone:这让我有点好奇,1901年之前有一种方法可以获得时间戳,我尝试了strtotime,但它总是返回0。有没有办法获得之前日期的时间戳? – jtanmay 2010-08-12 19:33:19

回答

5

这是关于Unix时代。

参见:date()time()

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

+0

感谢您的解释和链接到PHP手册。它确实有助于很好地理解时间戳。 @Everyone,感谢您的宝贵时间和对我学习生活的支持。 – jtanmay 2010-08-12 18:51:58

+0

这让我有点好奇,1901年前有什么方法可以获得时间戳,我用strtotime试过,但它总是返回0。有没有办法获得之前日期的时间戳? – jtanmay 2010-08-12 18:57:09

+0

UNIX时间戳限制在32位机器上的32位整数,因此您的有效范围为1901-2038左右。如果您需要更大的范围或移动到64位平台,请使用http://php.net/datetime。 (http://bugs.php.net/bug.php?id=50913) – 2010-08-13 07:59:40

1

Unix时间开始于Unix纪元是午夜1月1日,1970年之前,所以任何日期将导致返回负值。

0

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

4

之后的秒数这是预期的行为。

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

0

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

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

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