将 IST 日期时间转换为亚洲/加尔各答日期时间会在 PHP DateTime 的 setTime() 过程中增加 3.5 小时



我有一段代码

$data = array(
'fromTimezone'          => 'IST',
'toTimezone'            => 'Asia/Kolkata',
'dateTime'              => '2020-04-19 16:23:00',
'dateTimeFormat'        => 'Y-m-d H:i:s'
);
$fromTimezone           = $data['fromTimezone'];
$toTimezone             = $data['toTimezone'];
$dateTime               = $data['dateTime'];
$dateTimeFormat         = $data['dateTimeFormat'];

$fromZoneDateTime    = new DateTime($dateTime, new DateTimeZone($fromTimezone));
// synchronizing with the to-Timezone
$fromZoneDateTime->setTimezone(new DateTimeZone($toTimezone));
$returnDateTime    = date($dateTimeFormat, strtotime($fromZoneDateTime->format('Y-m-d H:i:s')));
echo $returnDateTime;

正如你所看到的,我正在将时区从IST转换为亚洲/加尔各答。基本上,亚洲/加尔各答是IST(印度标准时间(,因此,它们都应该有相同的时间。但是我得到的结果是2020-04-19 19:53:00

我做错了什么?

编辑:-

有人可能会问我,为什么我需要转换到IST去亚洲/加尔各答。事实上,在Laravel应用程序中,我们的默认时区是亚洲/加尔各答。但在mysql查询中,我得到的时区是"IST"。

SELECT IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone) AS mysql_timezone;

在用户表中,用户的时区保存为"亚洲/加尔各答"、"美国/纽约"等,这些时区是从移动应用程序发送的。

在我的表中,有一个名为created_date的字段(不要与created_at混淆(,它通过使用PHP的date('Y-m-d H:i:s')过程来保存当前日期时间。因此,当我试图将其转换为用户的时区时,我将其从IST转换为亚洲/加尔各答。

根据维基百科亚洲/加尔各答我们UTC+5:30,这是你得到半小时时差的地方。

印度共和国使用一个时区,即印度标准时间(IST(。现在是UTC+05:30,也就是说,比协调世界时提前了五个半小时。。。IANA时区数据库只包含一个区域,即亚洲/加尔各答。

附加信息

根据PHP时区的文档:

警告请不要使用此处列出的任何时区(UTC除外(,这些时区的存在只是出于向后兼容的原因,可能会暴露错误行为。

警告如果您忽略上述警告,还请注意,提供PHP时区支持的IANA时区数据库使用POSIX样式的符号,这会导致Etc/GMT+n和Etc/GMT-n时区从常见用法中颠倒过来。

例如,在中国和西澳大利亚(以及其他地方(使用的格林尼治标准时间前8小时的时区实际上是该数据库中的Etc/GMT-8,而不是您通常预期的Etc/GMT+8。

同样,强烈建议您使用正确的时区,例如亚洲/上海或澳大利亚/珀斯。

相关内容

  • 没有找到相关文章

最新更新