【问题标题】:PHP date() function ignores the timestamp parameterPHP date() 函数忽略时间戳参数
【发布时间】:2011-02-15 20:01:12
【问题描述】:

以下程序的输出可以在这里看到: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参数,仍然按照设置的时区显示日期时间。

为什么会这样?

【问题讨论】:

    标签: php datetime timestamp


    【解决方案1】:

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

    时间戳是从某个时间点开始计数的整数(通常是UNIX EPOCH)。虽然这个值的显示是时区无关的,但也差不多就是说,格式正确的日期的值(用时区表示)是时区无关的......

    例如,以下所有陈述都是正确的(逻辑上)

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

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

    【讨论】:

      【解决方案2】:

      date()函数的第二个参数,如果没有指定,就是time()的值。

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

      from date()'s manual

      所以实际上什么都没有被忽略。

      【讨论】:

        【解决方案3】:

        date函数返回的是为当前时区计算的时间戳的日期,正如其他人所说,如果没有传递时间戳,则使用当前时间作为时间戳,因此传递time()与根本没有通过任何东西。

        但是,执行$time = time();sleep 5;echo date($format,$time); 之类的操作会让您获得 5 秒前的日期。

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

        UTC 时区实际上是计算时间戳的时间,更准确地说,是自 1970 年 1 月 1 日 00:00 UTC 以来的秒数,然后它在每小时从 UTC 时间偏移的时间戳,以获取当前设置的时区中的时间。

        【讨论】:

          猜你喜欢
          • 2018-04-20
          • 1970-01-01
          • 1970-01-01
          • 2013-07-20
          • 2017-10-17
          • 1970-01-01
          • 2011-11-06
          • 1970-01-01
          • 2021-02-18
          相关资源
          最近更新 更多