【问题标题】:Why does strtotime returns a date with some strange string?为什么 strtotime 返回带有一些奇怪字符串的日期?
【发布时间】:2021-11-17 18:20:28
【问题描述】:

我正在使用

测试一些字符串(国家)

strtotime()

功能和发现:

  • 'Poland' 确实会返回时间戳,但 'Soland' 或其他类似的东西不会。
  • 'GB' 也是。

更进一步,'a string' 也返回一些东西,就像一些简单的字母,如 'G''P'

datetime relative formats 文档中未列出这些字符串。

我可能很笨,但我没有找到关于那些特殊情况的任何信息,到底发生了什么?

第二个不太重要的问题:知道我事先不知道格式,如何实际检查字符串是否是有效的日期格式,不包括那些“特殊”字符串?

【问题讨论】:

  • 虽然可能有一些特定的原因可以挖掘,但strtotime 并不是首先验证日期字符串的工具,因为它接受“明年”和“+1 个月”和这样非常正式……
  • stackoverflow.com/questions/10119671/… 链接到函数的更多技术方面
  • “以及如何实际检查字符串是否是有效的日期格式,不包括那些“特殊”字符串?” - 在我们之前,我们可以做一些基础研究吗?问?在 Google 中输入“php 检查日期有效”,立即将您带到stackoverflow.com/questions/19271381/… ...
  • 以及如何实际检查字符串是否是有效的日期格式,有一组有效的可接受格式,使用键进行格式匹配,使用值进行正则表达式匹配,循环遍历它们,在第一次匹配时,使用格式将值传递给 DateTime::createFromFormat,然后验证 min-max 或 from、to 等
  • 我不知道格式我会明白这就是为什么 strtotime 有用。我的问题更多是关于为什么会发生这种情况。但这没关系,我会深入研究源代码以找出答案,并自己检查日期。谢谢。

标签: php date datetime timestamp php-7


【解决方案1】:

DateTime 接受与 strtotime 相同的参数。用于 DateTime 的参数“GB”表明“GB”被识别为时区。

var_dump(new DateTime('GB'));
/*
object(DateTime)#3 (3) {
  ["date"]=>
  string(26) "2021-09-24 16:54:37.568996"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(2) "GB"
}
*/

与“波兰”一样,“GB”也出现在 list of Others time zones 中。 “索兰”不是。然后 DateTime 为正确识别的时区提供当前时间(“现在”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多