可以在此处看到以下程序的输出: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参数,并且仍然根据设置的时区显示日期时间。
为什么会这样?
答案 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()的值。
所以实际上没有什么东西被忽视了。
答案 2 :(得分:1)
日期函数返回为当前时区计算的时间戳的日期,正如其他人所说的,如果没有时间戳传递给它,那么当前时间用于时间戳,所以传递time()
是同样没有传递任何东西。
然而,做$time = time();sleep 5;echo date($format,$time);
之类的事情会让你在过去的5秒钟内获得约会。
这意味着显示为当前时区格式化的日期,这样您就可以拥有一种通用的方法来保持计算机/服务器之间的时间不变并且易于分析,并且能够在任何所需的时区显示日期。
UTC时区实际上是时间戳计算的时间,更确切地说,是自UTC时间1970年1月1日00:00起的秒数,然后它从/向其添加或减去3600(60 * 60)秒每小时的时间戳偏离UTC时间以获得当前设置的时区中的时间。