gpt4 book ai didi

php - 如何在 PHP 中使用 BRT 时区缩写解析字符串

转载 作者:行者123 更新时间:2023-12-03 20:54:02 27 4
gpt4 key购买 nike

我在不同的时区有不同的字符串:
2019-11-13 00:52:03 ADT
2019-11-13 00:52:03 欧洲东部时间
2019-11-13 00:52:03 BRT

我使用格式 Y-m-d H:i:s TDateTime::createFromFormat获取日期时间对象。

但下一个代码返回 FALSE:DateTime::createFromFormat('Y-m-d H:i:s T', '2019-11-13 00:52:03 BRT')
问题: PHP 无法识别 BRT 缩写时区。

有什么办法可以克服这个问题吗?
例如,我可以在 PHP 时区列表中添加新的缩写吗?

附言

    date_default_timezone_set('America/Sao_Paulo');
echo date_default_timezone_get();
echo ' => '.date('T');

返回 America/Sao_Paulo => -03

最佳答案

不,您不能向 PHP 添加新的时区缩写。 PHP 从内置时区数据库中获取这些时区,该数据库基于 Olson Database .

但是,您可以在 DateTime::createFromFormat 中提供文字。通过使用反斜杠字符转义它们。因此,在您的情况下,如果失败,您将需要手动设置时区。您可以使用 DateTimezone::listAbbreviations() 测试时区缩写是否与数据库中的任何内容都不匹配。 .

这是一个例子...

$defaultTZ = null;
$tzString = "2019-11-13 00:52:03 BRT";
$tzs = implode('|', array_keys(DateTimeZone::listAbbreviations()));

if (!preg_match("/(?: )(" . $tzs . ")$/i", $tzString)) {
if (preg_match("/(?: )([A-Z]{3,4})$/", $tzString, $match)) {
$tzAbr = "\\" . implode("\\", str_split($match[1]));
$defaultTZ = new DateTimezone("America/Sao_Paulo");
} else {
// ohnoes something went horribly wrong
}
} else {
$tzAbr = "T";
}

$date = DateTime::createFromFormat("Y-m-d H:i:s $tzAbr", $tzString, $defaultTZ);

var_dump($date);

这给你...

对象(日期时间)#2 (3) {
[“日期”]=>
字符串(26)“2019-11-13 00:52:03.000000”
[“时区类型”]=>
整数(3)
[“时区”]=>
string(17) "美国/圣保罗"
}

您必须为如何处理未指定的时区制定自己的逻辑,但这应该让您了解如何从这里开始。

关于php - 如何在 PHP 中使用 BRT 时区缩写解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61573753/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com