Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP日期时区-构造函数与Setter方法_Php_Date_Datetime_Timezone - Fatal编程技术网

PHP日期时区-构造函数与Setter方法

PHP日期时区-构造函数与Setter方法,php,date,datetime,timezone,Php,Date,Datetime,Timezone,当使用PHPDateTime类并尝试设置DateTimeZone时,我会根据设置方式得到不同的结果:使用DateTime::u构造或使用DateTime::setTimezone方法 以下是一个例子: $date = '2014-08-01' $dateTimeOne = new DateTime($date, new DateTimeZone('America/Los_Angeles')); echo $dateTimeOne->format('Y-m-d\TH:i:sP'); //

当使用PHP
DateTime
类并尝试设置
DateTimeZone
时,我会根据设置方式得到不同的结果:使用
DateTime::u构造
或使用
DateTime::setTimezone
方法

以下是一个例子:

$date = '2014-08-01'

$dateTimeOne = new DateTime($date, new DateTimeZone('America/Los_Angeles'));
echo $dateTimeOne->format('Y-m-d\TH:i:sP'); 
// 2014-08-01T00:00:00-07:00

$dateTimeTwo = new DateTime($date);
$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dateTimeTwo->format('Y-m-d\TH:i:sP'); 
// 2014-07-31T17:00:00-07:00
另见

我环顾四周,除了在和书中的以下评论之外,没有找到一个足够的解释来解决这些特殊行为

注释指出,
DateTime::setTimezone
方法将更改特定时间点(时间戳)的时区,但Unix时间戳保持不变

另一方面,
DateTime::_构造
DateTimeZone参数用于“用用户定义的时区覆盖当前默认时区”

除此之外,关于这一主题(我能找到的)没有太多

这是我想知道的:

  • 进一步解释这两种设置时区的方法
  • 我应该在什么时候使用
    DateTime::u构造
    来设置时区
  • 我应该在什么时候使用
    DateTime::setTimezone
    设置时区
  • 使用一个与另一个或如何结合使用它们的清晰示例

  • 这是正常的行为

    如果未在构造函数中指定时区,则使用默认时区,即使用日期\默认\时区\设置()设置的时区

    当你打电话时:

    $dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));
    
    它将默认时区中设置的日期移动到新时区


    1) (建造商)在“美国/洛杉矶”设置日期
    2) (setter)在默认时区中设置日期,将日期移到“America/Los_Angeles”



    您的默认时区可能是UTC或其他相近的时区。你让电脑把2014-08-01设定为UTC。然后,您要求切换到提前7小时的“美国/洛杉矶”时区,因此将日期更改为2014-07-31 17:00。

    在构造函数中有一个时区意味着
    $date
    在该时区中;设置时区会根据施工时时区与给定时区之间的差异移动日期。