我有一个这种格式的字符串:2013-07-31T19:20:30.45-07:00
我要解析它,以便我可以,例如,说出它是星期几。但我正在努力应对时区偏移。如果我做date_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_default_timezone_set('UTC')
设置了默认时区。
更新:如果字符串有一个正时区,例如2013-07-31T19:20:30.45+07:00
,那么date_parse()
输出的最后一部分是:
["is_localtime"]=> bool(true)
["zone_type"]=> int(1)
["zone"]=> int(-420)
["is_dst"]=> bool(false)
}
答案 0 :(得分:1)
420是以分钟为单位的区域。
420/60 = 7
我想解析它,以便我可以,例如,说出哪一天 这一周。
如果您想知道一周的哪一天,您有很多选择。例如,您可以使用date和mktime-functions:
$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_name_from_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);
答案 1 :(得分:0)
2013-07-31T19:20:30.45-07:00
^ y-m-d ^ time ^ timezone offset
我猜测UTC的时区是-7 hours
。
请记住,有些国家/地区有半小时的时区,甚至是小时区。这可能就是你在几分钟内得到时区的原因。