在PHP中解析带有时区的datetime字符串
我有一个如下格式的字符串:在PHP中解析带有时区的datetime字符串,php,timezone,Php,Timezone,我有一个如下格式的字符串:2013-07-31T19:20:30.45-07:00,我想对它进行解析,这样我就可以,例如,说出一周中的哪一天。但我正在努力应对时区偏移。如果我做了date\u parse(“2013-07-31T19:20:30.45-07:00”)那么我会得到这样的结果: array(15) { ["year"]=> int(2013) ["month"]=> int(7) ["day"]=> int(31) ["hour"]=> int
2013-07-31T19:20:30.45-07:00
,我想对它进行解析,这样我就可以,例如,说出一周中的哪一天。但我正在努力应对时区偏移。如果我做了date\u parse(“2013-07-31T19:20:30.45-07:00”)
那么我会得到这样的结果:
array(15) {
["year"]=> int(2013)
["month"]=> int(7)
["day"]=> int(31)
["hour"]=> int(19)
["minute"]=> int(20)
["second"]=> int(30)
["fraction"]=> float(0.45)
["warning_count"]=> int(0)
["warnings"]=> array(0) { }
["error_count"]=> int(0)
["errors"]=> array(0) { }
["is_localtime"]=> bool(true)
["zone_type"]=> int(1)
["zone"]=> int(420)
["is_dst"]=> bool(false)
}
它对时区做了一些事情,但是如果我想显示时区信息,我该如何处理420
如果有问题,我之前已经使用date\u default\u timezone\u set('UTC')
设置了默认时区
更新:如果字符串的时区为正,例如2013-07-31T19:20:30.45+07:00
,则date\u parse()输出的最后一部分为:
["is_localtime"]=> bool(true)
["zone_type"]=> int(1)
["zone"]=> int(-420)
["is_dst"]=> bool(false)
}
420在几分钟内就是区域
420/60=7
我想对它进行解析,这样我就可以,例如,说一天的哪一天
现在是星期
如果你想知道星期几,你有很多选择。例如,您可以使用日期和时间函数:
$parsed = date_parse("2013-07-31T19:20:30.45-07:00");
$unix_timestamp = mktime($parsed['hour'], 0, 0, $parsed['month'], $parsed['day'], $parsed['year'], (int)$parsed['is_dst']);
echo date('l', $unix_timestamp);
那么你想显示关于时区的信息?您可以使用timezone\u name\u from\u abbr
函数获取时区名称:
$name = timezone_name_from_abbr("", -1*$parsed['zone']*60, false); // NB: Offset in seconds!
var_dump($name);
$timezone = new DateTimezone($name);
var_dump($timezone);
420在几分钟内就是区域
420/60=7
我想对它进行解析,这样我就可以,例如,说一天的哪一天
现在是星期
如果你想知道星期几,你有很多选择。例如,您可以使用日期和时间函数:
$parsed = date_parse("2013-07-31T19:20:30.45-07:00");
$unix_timestamp = mktime($parsed['hour'], 0, 0, $parsed['month'], $parsed['day'], $parsed['year'], (int)$parsed['is_dst']);
echo date('l', $unix_timestamp);
那么你想显示关于时区的信息?您可以使用timezone\u name\u from\u abbr
函数获取时区名称:
$name = timezone_name_from_abbr("", -1*$parsed['zone']*60, false); // NB: Offset in seconds!
var_dump($name);
$timezone = new DateTimezone($name);
var_dump($timezone);
我猜时区距离UTC大约7小时
请记住,有些国家有半小时时区,甚至分钟时区。这可能就是为什么你能在几分钟内得到时区
我猜时区距离UTC大约7小时
请记住,有些国家有半小时时区,甚至分钟时区。这可能就是为什么你可以在分钟内得到时区。我甚至都没有记下时区可能是分钟!我添加了一个正时区的示例。。。在我看来,区域
与我期望的正好相反…?好吧,在这种情况下,您可以忽略区域类型字段。时区偏移可以是15、30或60分钟。太好了,谢谢!我已经很久没有做过很多PHP了,上一次做PHP的时候,我基本上避开了时区。我甚至都没注意到时区可能是几分钟!我添加了一个正时区的示例。。。在我看来,区域
与我期望的正好相反…?好吧,在这种情况下,您可以忽略区域类型字段。时区偏移可以是15、30或60分钟。太好了,谢谢!我已经很久没有做过很多PHP了,上一次做PHP的时候我基本上避开了时区。谢谢-我甚至没有意识到420
是几分钟!谢谢-我甚至没有意识到420
是几分钟!