【问题标题】:PHP: Date larger than current datePHP:日期大于当前日期
【发布时间】:2017-01-02 13:47:33
【问题描述】:

我有这个代码:

$curdate = '22-02-2011';

$mydate = '10-10-2011';                     

if($curdate > $mydate)
{
    echo '<span class="status expired">Expired</span>';
}

这会回显 expired 但不应该因为 $mydate 是未来的,因此小于 $curdate 但 PHP 只查看前两个数字 22 和 10 而不是整个字符串。我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: php date


    【解决方案1】:

    尝试先将它们都转换为时间戳,然后比较两个转换后的值:

    $curdate=strtotime('22-02-2011');
    $mydate=strtotime('10-10-2011');
    
    if($curdate > $mydate)
    {
        echo '<span class="status expired">Expired</span>';
    }
    

    这会将它们转换为自 1970 年 1 月 1 日以来的秒数,因此您的比较应该有效。

    【讨论】:

    • @Cameron 你不觉得以错误的格式定义一个变量然后将它转换成另一个有点过分吗?为什么不以正确的格式定义它呢?
    • 如果我想知道当前日期小于 1 个月 mydate 怎么样?该怎么做?
    • 另外,在不同的时区上要小心,与本地主机相比,生产服务器可能在不同的默认时区上运行。您可以使用以下方法更改默认时区: date_default_timezone_set("Asia/Colombo");
    【解决方案2】:

    问题是您当前的变量是字符串,而不是时间变量。

    试试这个:

    $curdate = strtotime('22-02-2011');
    
    $mydate = strtotime('10-10-2011');  
    

    【讨论】:

      【解决方案3】:

      使用 PHP 日期/时间类将这些字符串表示形式转换为您可以使用 getTimestamp() 直接比较的内容来比较 UNIX 时间。

      如果你确定你所有的日期都是这种格式,你可以把它们字符串切片成 YYYY-MM-DD,然后字符串比较就会正常工作。

      【讨论】:

        【解决方案4】:
        if(strtotime($curdate) > strtotime($mydate))
        {
        ...
        }
        

        【讨论】:

          【解决方案5】:

          很简单

          $curdate = '2011-02-22';
          $mydate = '2011-10-10';                     
          
          if($curdate > $mydate)
          {
              echo '<span class="status expired">Expired</span>';
          }
          

          【讨论】:

          • 如果 OP 无法从源头更改日期格式怎么办?
          • @jnpcl 他会有多么奇怪的心血来潮!为什么要将正确的格式更改为其他格式?
          • @Col。 Shrapnel:在我的工作中,我必须处理只提供日期为MMDDYY.. 的遗留系统。尽管我想将它们更改为适当的东西,但我做不到。有时您只是被一种错误的格式所困扰。
          • @Col。弹片:这是轶事证据。 OP 没有说明他可以更改格式。你的回答假设他可以改变它。
          • @jnpcl 但他在代码中正确定义了它。因此,他必须已经以正确的格式定义它。你太过分了。放松,没那么难:)
          【解决方案6】:
          $row_date = strtotime($the_date);
          $today = strtotime(date('Y-m-d'));
          
          if($row_date >= $today){
               -----
          }
          

          【讨论】:

          【解决方案7】:
          $currentDate = date('Y-m-d');
          
          $currentDate = date('Y-m-d', strtotime($currentDate));
          
          $startDate = date('Y-m-d', strtotime("01/09/2019"));
          
          $endDate = date('Y-m-d', strtotime("01/10/2022"));
          
          if (($currentDate >= $startDate) && ($currentDate <= $endDate)) {
          
              echo "Current date is between two dates";
          
          } else {
          
              echo "Current date is not between two dates";  
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-04
            • 2016-08-02
            • 2013-02-12
            • 1970-01-01
            相关资源
            最近更新 更多