我有一个表格,其中日期/时间信息存储为字符串。由于计划不周,一些字符串中有时区(例如,"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/