【发布时间】:2020-08-03 00:47:20
【问题描述】:
我有一段代码
$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 转换为 Asia/Kolkata。
【问题讨论】:
-
看起来那将是半小时时区之一。这里有更多stackoverflow.com/questions/32261668/…