当前位置: 首页 > 知识库问答 >
问题:

在PHP中解析带有时区的datetime字符串

沃楷
2023-03-14

我有一个这种格式的字符串: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\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)
}

共有2个答案

戈建白
2023-03-14
2013-07-31T19:20:30.45-07:00
^ y-m-d    ^ time      ^ timezone offset

我猜时区距离UTC大约7小时。

请记住,有些国家有半小时时区,甚至分钟时区。这可能就是为什么你能在几分钟内得到时区。

邢博学
2023-03-14

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);
 类似资料:
  • 我想从格式为“2021-12-10T18:49:00-05:00”的字符串中解析带有时区的日期。我尝试使用“date('Y-m-dh:I:s',strotime($myDate))”进行解析。但这是第二天的返回日期。非常感谢您的帮助。

  • 我从另一个表中提取DateTime时间戳结果,该表设置为: 当倾销特定价值的

  • 问题内容: 有谁知道如何解析所需格式的日期字符串? 问题答案: 看到: Mozilla Core JavaScript参考:Date对象 Mozilla核心JavaScript参考:String.Split 码:

  • 问题内容: 我正在尝试像在Python中一样解析时间戳字符串,但是在寻找一种可以处理缩写时区的解决方案时遇到了麻烦。 我正在使用的功能,但无法解析时区。是否有捷径可寻? 问题答案: 这可能不起作用,因为这些缩写不是唯一的。有关详情,请参见此页面。如果使用一组已知的输入,则可能只需要自己手动处理即可。

  • 我已经研究过关于同一错误的其他问题,但我很难将它们应用到我的情况中。 这是我得到的错误: 致命错误:未捕获异常“exception”,消息为“DateTime::u-construct()[DateTime.-construct]:无法分析位置10(1)处的时间字符串(2013-07-22164:50:00):在/Applications/XAMPP/xamppfiles/htdocs/Festi

  • (我想)快速提问。如何将解析为(将时间设置为)? java.time.format.DateTimeParseException:无法分析文本“2007-07-21+00:00”:无法从TemporalAccessor获取OffsetDateTime:{offsetseconds=0},ISO解析为类型java.time.format.Parsed的2007-07-21