PHP date()函数忽略timestamp参数

时间:2011-02-15 20:01:12

标签: php datetime timestamp

可以在此处看到以下程序的输出:http://codepad.org/egNGJBUL

<?php

/* Checking if time() is really timezone independent */

date_default_timezone_set('UTC');
echo time();
echo "\n";
date_default_timezone_set('Australia/Queensland');
echo time();
echo "\n";

/* Using date() function passing timestamp parameter */

date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s',time());
echo "\n";
date_default_timezone_set('Australia/Queensland');
echo date('Y-m-d H:i:s',time());
echo "\n";


/* Using date() function without passing timestamp parameter */

date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s');
echo "\n";
date_default_timezone_set('Australia/Queensland');
echo date('Y-m-d H:i:s');
echo "\n";

从输出的第1-2行,我们可以看到time()返回的值实际上与时区无关。

在第3-4行,奇怪的是date()函数忽略了timestamp参数,并且仍然根据设置的时区显示日期时间。

为什么会这样?

3 个答案:

答案 0 :(得分:2)

不确定你期望看到什么,但是,对我来说看起来很正常。

时间戳是从某个时间点开始计算的整数(通常为UNIX EPOCH)。虽然这个值的显示是独立于时区的,但是没有或多或少,因此,用时区标注的格式正确的日期的值是时区独立的......

示例,以下所有语句都是真的(逻辑上)

1297799809 == 1297799809

2011-02-15 19:56:49 (UTC) == 2011-02-16 05:56:49 (Austria/Queensland)

所有时间都是'时区独立'。时区只会影响我们 显示 特定时刻的方式。

答案 1 :(得分:1)

date()函数第二个参数,如果未指定,则为time()值。

  

date()使用给定的整数时间戳返回根据给定格式字符串格式化的字符串,如果没有给出时间戳,则返回当前时间。换句话说,timestamp是可选的,默认为time()的值。

from date()'s manual

所以实际上没有什么东西被忽视了。

答案 2 :(得分:1)

日期函数返回为当前时区计算的时间戳的日期,正如其他人所说的,如果没有时间戳传递给它,那么当前时间用于时间戳,所以传递time()是同样没有传递任何东西。

然而,做$time = time();sleep 5;echo date($format,$time);之类的事情会让你在过去的5秒钟内获得约会。

这意味着显示为当前时区格式化的日期,这样您就可以拥有一种通用的方法来保持计算机/服务器之间的时间不变并且易于分析,并且能够在任何所需的时区显示日期。

UTC时区实际上是时间戳计算的时间,更确切地说,是自UTC时间1970年1月1日00:00起的秒数,然后它从/向其添加或减去3600(60 * 60)秒每小时的时间戳偏离UTC时间以获得当前设置的时区中的时间。