PHP设置时区而不更改日期


PHP set TimeZone without changing date?

我将UNIX时间戳从javascript vat stamp = +new Date/1000发送到PHP。

然后我做

//Here $d = '2015/04/03 00:00:00'
$d = new DateTime("@{$stamp}");
$d->setTimezone( new DateTimeZone( 'Pacific/Auckland' ) );
//Here $d = '2015/04/03 00:00:00' + 7:15 hrs ( 7:15 hrs is time diff between my browser & Auckland)

我想更改时区,但保持日期不变。所以,在我setTimezonePacific/Auckland之后,日期应该仍然是'2015/04/03 00:00:00'

这里有一种方法。

$_date = new 'DateTime($date->format('Y-m-d H:i:s'), new 'DateTimeZone('<time zone>'));

我需要指出,你在要求一些荒谬的东西。UNIX时间戳表示绝对时间点。它不代表"2015/04/03 00:00:00",因为日期格式可以指几十个不同的时间点,这取决于您在哪个时区中解释此字符串。UNIX时间戳没有这个问题,它代表的时间点是不可基于时区协商的。

如果你取一个绝对时间点,并希望将其格式化为取决于时区的人类可读时间,那么这个人类可读的值必然会通过应用不同的时区来改变。你所要求的是改变时间戳所指的时间点,在这一点上它是任意的。