我将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)
Run Code Online (Sandbox Code Playgroud)
我想更改时区,但将日期保持不变。因此,在我setTimezone到达之后Pacific/Auckland,日期仍然应该是'2015/04/03 00:00:00'。
这是一种方法。
$_date = new \DateTime($date->format('Y-m-d H:i:s'), new \DateTimeZone('<time zone>'));
Run Code Online (Sandbox Code Playgroud)
dec*_*eze -3
我需要指出你要求的是一些无意义的东西。UNIX 时间戳表示绝对时间点。它不代表“2015/04/03 00:00:00”,因为该日期格式可以引用几十个不同的时间点,具体取决于您解释该字符串的时区。UNIX 时间戳不代表有这个问题,它代表什么时间点是不能根据时区协商的。
如果您采用绝对时间点并希望将其格式化为取决于时区的人类可读时间,那么该人类可读值必然会通过对其应用不同的时区而发生变化。您要求的是更改时间戳所指的时间点,此时它是任意的。