为什么DateTimeZone的getOffset()需要一个参数?

时间:2019-02-09 20:30:47

标签: php

PHP的DateTimeZone::getOffset(timezone_offset_get)datetime参数有什么意义?

<?php

$tz = new DateTimeZone("Asia/Tokyo");

var_dump($tz->getOffset(new DateTime())); // 32400
var_dump($tz->getOffset(new DateTime('now', new DateTimeZone('Asia/Taipei')))); // 32400
var_dump($tz->getOffset(new DateTime('now', new DateTimeZone('Europe/Budapest')))); // 32400
var_dump($tz->getOffset(new DateTime('2000-01-01', new DateTimeZone('America/New_York')))); // 32400

我遗漏了一些东西,还是参数根本不影响函数的输出?

文档中提到该函数计算参数的偏移量。这是什么意思?

1 个答案:

答案 0 :(得分:1)

因为偏移量取决于日期。

例如,夏天Europe/Budapest的偏移量为2小时(由于夏时制),冬天的偏移量为1小时:

$tz = new DateTimeZone("Europe/Budapest");

var_dump($tz->getOffset(new DateTime('2018-06-06', $tz))); // 7200
var_dump($tz->getOffset(new DateTime('2018-01-06', $tz))); // 3600

夏令时不是唯一的更改源,例如参见Moscow time

$tz = new DateTimeZone("Europe/Moscow");

var_dump($tz->getOffset(new DateTime('2010-01-01', $tz))); // 10800
var_dump($tz->getOffset(new DateTime('2012-01-01', $tz))); // 14400
var_dump($tz->getOffset(new DateTime('2015-01-01', $tz))); // 10800