php - 查看日期/时间字符串是否包含时区

标签 php datetime timezone

我有一个表格,其中日期/时间信息存储为字符串。由于计划不周,一些字符串中有时区(例如,"2014-01-13 04:22 -8")而其他字符串则没有("2014-01 -13 04:22")。这两种类型的字符串都可以与 strtotime()new DateTime() 一起使用,但是一旦我这样做了,关于是否有时区的信息就会丢失——没有时区的字符串timezone 被分配了服务器的默认时区。有没有我可以用来查明字符串是否包含时区标识符的函数?

为此编写正则表达式似乎微不足道,但经验告诉我,日期格式有足够多的变化和奇怪的特殊情况,因此尽可能使用内置函数总是更好。

最佳答案

像这样的正则表达式:

$str = "2014-01-13 04:22 -8"
$has_timezone = preg_match(/[-+][0-9]{1,2}$/, $str);

在字符串末尾查找 +- 后跟 1 或 2 个数字。

如果你还输入conains:

2004-10-10

-10 将被检测为时区,因此可能添加一个 [space] 检测:

$has_timezone = preg_match(/\s[-+][0-9]{1,2}$/, $str);

如果你的时间戳字符串总是:

YYYY-mm-dd HH:ii[ timezone]

那么即使是一个简单的 strlen 检查就足够了。 16 = 无时区,17+ = 时区。

关于php - 查看日期/时间字符串是否包含时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485281/

相关文章:

mysql - 为什么where子句中的大于会导致全表扫描?

java - 为什么日期在不同时区以相同的毫秒数变化?

php - mysqli_num_rows = 0,而它应该是 1

php - 具有多个连接的 SQL 查询会影响性能

php - 设置mysql表的容量使其可以容纳150行?

javascript - 解析 DateTime 值会呈现不同时区的不同日期 - JS

c# - 日期时间到字符串转换显示错误

java - 获取设备的本地时区

Java 将时间对象 (GMT) 转换为字符串 (GMT+1)

php - 在整个文档中去除标签的快速方法