【问题标题】:If date is bigger than.. not working properly in php [duplicate]如果日期大于..在php中无法正常工作[重复]
【发布时间】:2011-11-01 15:09:00
【问题描述】:

可能重复:
PHP: Date larger than current date

我的日期格式如下:dd-mm-yyyy

现在根据 php,28-06-2011 大于 01-11-2011

$today = date('d-m-Y', time());

if("28-06-2011" > $today ){
     echo "This returns true";
}

我怎样才能使它正常工作?

【问题讨论】:

  • 如果该日期的格式为YYYY-MM-DD,您可以按照您描述的方式进行操作。
  • @Tim 不,即使那样 - 它只会使用 YYYY 部分进行比较
  • @Pekka:你确定吗?在我尝试的测试中seems to be working fine
  • @Tim 确实!画我吃惊。我一直认为字符串在比较之前会先自动转换为 int。

标签: php


【解决方案1】:

你不能这样比较日期。他们是两个字符串。 PHP 将尝试将它们解释为数字(取前两位数字,然后由于- 而失败)并比较它们。 结果证明这是不正确的。 YYYY-MM-DD 类型的字符串确实可以使用>< 进行比较。

所以请参阅Col. Shrapnel's answer 并更改您的日期格式 - 无论如何这都是有道理的。如果你不能这样做(因为它是用户输入的日期或其他),你可以创建两个 DateTime 对象,感谢 PHP 5 的魔法,你也可以像这样比较:

$date1 = new DateTime('2000-01-01');
$date2 = new DateTime('2001-01-01');

if ($date1 > $date2)... // this works

【讨论】:

    【解决方案2】:
    if(strtotime("28-06-2011") > time()) {
    }
    

    【讨论】:

      【解决方案3】:

      我的日期格式如下:dd-mm-yyyy

      那是你错了。
      你不应该在这个公司里约会。将它们放在 yyyy-mm-dd 中,您就可以毫无问题地比较它们。

      【讨论】:

        【解决方案4】:

        您不能将日期与字符串进行比较。 创建另一个类似于今天变量的日期项目,固定日期为 28-06-2011,然后比较 2 个对象。 $datetocompare = date("d-m-Y", mktime(0, 0, 0, 28, 06, 2011));

        如果($datetocompare>$today){} 这样就可以了。

        来源:http://uk.php.net/manual/en/function.date.php

        【讨论】:

          【解决方案5】:

          如果你这样做,你实际上是在比较字符串,而不是日期。要正确比较日期,您需要将日期值/字符串转换为 time stamps,您可以使用 strtotime 函数来完成。

          这是一个包含更多信息的链接:http://php.net/manual/en/function.strtotime.php

          【讨论】:

            猜你喜欢
            • 2012-05-30
            • 1970-01-01
            • 1970-01-01
            • 2014-03-18
            • 2014-07-30
            • 2012-06-25
            • 2018-02-13
            • 2018-07-12
            • 1970-01-01
            相关资源
            最近更新 更多