【问题标题】:Why date comparison gives wrong result?为什么日期比较给出错误的结果?
【发布时间】:2022-02-07 21:40:28
【问题描述】:
$examDay1 = date("07.02.2022");

$examDay2 = date("18.03.2022");

$examDay3 = date("06.04.2022");

$today = date("d.m.Y");

print_r($examDay1 <= $today);  //true 

print_r($examDay2 <= $today);  // false as I expected

print_r($examDay3 <= $today);  // true for some reason

我正在尝试在相同的特定日期向用户授予访问权限。例如,其中一个从今天开始,并且比较效果很好。然而,不知何故,它说$examDay3 &lt;=$today 给了true。我做错了什么?

【问题讨论】:

标签: php date


【解决方案1】:

php 中的date() 函数返回一个字符串,因此您不能使用这些运算符进行比较。如果您希望能够比较日期,可以使用以下方法:

   $examDay1 = new DateTimeImmutable("07.02.2022");
   $examDay2 = new DateTimeImmutable("18.03.2022");
   $examDay3 = new DateTimeImmutable("06.04.2022");

   $today = new DateTimeImmutable('now');

   print_r($examDay1 <= $today);  //true 
   print_r($examDay2 <= $today);  // false 
   print_r($examDay3 <= $today);  // false

如果你更喜欢程序风格,你可以使用date_create_immutable()而不是new DateTimeImmutable()

【讨论】:

    【解决方案2】:

    您可以使用 dateTime 类。 DateTime::createFromFormat 方法很有用。 试试看:

    $examDay1 = DateTime::createFromFormat('j.m.Y', '07.02.2022');
    
    $examDay2 = DateTime::createFromFormat('j.m.Y', '18.03.2022');
    
    $examDay3 = DateTime::createFromFormat('j.m.Y', '06.04.2022');
    
    $today = new DateTime("now");;
    
    print_r($examDay1 <= $today);  
    
    print_r($examDay2 <= $today);  
    
    print_r($examDay3 <= $today);  
    
    

    【讨论】:

      【解决方案3】:

      PHPs Date 函数返回一个字符串,如documentation 中所述:

      您可以使用“strtotime”将日期字符串转换为时间戳整数,并用于比较。

      $examDay1 = date("07.02.2022");
      
      $examDay2 = date("18.03.2022");
      
      $examDay3 = date("06.04.2022");
      
      $today = time();
      
      var_dump(
          strtotime($examDay1) <= $today,
          strtotime($examDay2) <= $today,
          strtotime($examDay3) <= $today
      );
      

      【讨论】:

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