我在将偏移量转换为时区名称时遇到了奇怪的问题 我使用follwing代码将偏移量转换为时区。
$timezoneOffset = "+05:30";
echo $timezone_name = timezone_name_from_abbr("",$timezoneOffset*3600,0);
输出:亚洲/卡拉奇
预期产量:亚洲/加尔各答
要检查偏移量,请使用
$timezone = 'Asia/Kolkata';
$time = new \DateTime('now', new DateTimeZone($timezone));
$timezoneOffset = $time->format('P'); //output: +05:30
$timezone_name = timezone_name_from_abbr("",$timezoneOffset*3600,0);
echo $timezone_name;exit;
仍然是Asia/Karachi
那么问题是什么?我该怎么做才能解决这个问题?
提前致谢。
答案 0 :(得分:2)
您对$gmtOffset
参数的计算(以GMT为单位的偏移量,以秒为单位)不正确。
在PHP中,"+05:30" * 3600
会将18000
作为结果。这是因为字符串转换为整数5
然后相乘。这当然意味着您呼叫timezone_name_from_abbr()
的偏移量为300
分钟,而不是预期的330
分钟,导致返回“错误”的时区名称。
如果您希望保留现有的$timezoneOffset
字符串,可以使用以下内容以秒为单位转换为时区偏移量。
$timezoneOffset = "+05:30";
$offsetSeconds = DateTime::createFromFormat('P', $timezoneOffset)->format('Z');