PHP设置TimeZone而不更改日期?

Nes*_*Web 1 php datetime 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)
Run Code Online (Sandbox Code Playgroud)

我想更改时区,但将日期保持不变。因此,在我setTimezone到达之后Pacific/Auckland,日期仍然应该是'2015/04/03 00:00:00'

Hen*_*nry 9

这是一种方法。

$_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 时间戳不代表有这个问题,它代表什么时间点是不能根据时区协商的。

如果您采用绝对时间点并希望将其格式化为取决于时区的人类可读时间,那么该人类可读值必然会通过对其应用不同的时区而发生变化。您要求的是更改时间戳所指的时间点,此时它是任意的。

  • 我猜用词错误,我的意思是,用于在数据库中存储日期的 DateTime 对象首先具有错误的时区,并且它存储在数据库中,就像它具有 utc 时区一样。 (3认同)
  • 为op的问题提供背景,因为我有同样的需求。就我而言,我有一个数据库,其中时间以欧洲/巴黎时区存储,但在检索时被视为 UTC 时间...因此,在这种特殊情况下,我需要设置时区而不更改时间,直到我修复数据库中的所有日期。目前@Henry的回答效果很好。 (2认同)