【问题标题】:strtotime() doesn't return falsestrtotime() 不返回 false
【发布时间】:2016-06-15 20:13:31
【问题描述】:

当我提供仅包含空格或任何其他字符的字符串时,strtotime(" ") 不会返回 false。

有没有更少的代码解决方案让它返回false?

我不能使用preg_match,因为日期格式都因每个用户的语言环境而异。

http://php.net/manual/en/function.strtotime.php

成功返回时间戳,否则返回 FALSE。 PHP 之前 5.1.0,此函数将在失败时返回 -1。

编辑:我需要验证日期字符串,而不是修剪空格或其他用户提供的字符。

【问题讨论】:

  • @AlexG Trim 只去除字符串的开头和结尾。
  • 各位,我不需要删除空格,我需要验证日期字符串。查看我的编辑。
  • Fwiw,修剪本身不是目标,它只是防止将纯空格参数传递给strtotime() 的有用操作。
  • strtotime 应该返回 false 如果它不是一个有效的格式,为什么要用trim() 来帮助它?
  • 如果您的目标不是解决特定任务,并且您将函数行为视为错误,那么reporting a PHP bug 可能更有意义,而不是在这里询问。它实际上已经在 2014-01-15 上reported

标签: php strtotime


【解决方案1】:

在调用strtotime() 之前,应用trim() 作为一种解决方法来删除前导和尾随空格。

strtotime(' ') 返回当前时间。

strtotime('') (strtotime(trim(' '))) 返回false

函数的这种行为已经是reported作为一个bug,并且有一个基于修剪的fix,但是看起来这个补丁由于某种原因还没有被PHP团队接受。

【讨论】:

    【解决方案2】:

    我错过了什么吗?您是否尝试过删除空间?是否有充分的理由保留空间?当没有空间存在时,我会得到错误。

    strtotime("")

    【讨论】:

    • 空格返回当前时间...当前时间是一个值,所以它是真的。没有空格返回 false...这就是 PHP 的编写方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2011-11-10
    相关资源
    最近更新 更多