【问题标题】:How to compare between a date string and a date如何比较日期字符串和日期
【发布时间】:2026-02-19 18:25:02
【问题描述】:

我的 SQL 中有一个字段。示例:

field : expireddate      type  : varchar (10)

它将包含诸如 $expireddate = 31/08/2014 之类的数据,我会将其与今天的日期进行比较

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

if ($query['expireddate']<$today){
    echo 'expired date';
}
else
{
    echo 'uptodate';
}

但它不起作用。我试图将字符串转换为日期:

$expireddate=strtotime('d/m/Y','$query[expireddate]')

但它仍然无法正常工作。

有什么建议吗?

【问题讨论】:

  • 当然这是行不通的,因为字符串是从左到右逐个字符比较的,而dd/mm/yyyy 在这方面不是一种“可排序”的格式——你需要像@这样的东西987654325@。但是最好不要首先将日期存储为文本,而是使用您的 DBMS 提供的指定类型之一……然后已经在查询中进行比较,而不是之后在(看起来像)PHP 中进行比较。

标签: php string date


【解决方案1】:

但是,如果您只是将“/”替换为“-”,它将正常工作。

<?php
$expireddate = "31/08/2014";
$today = date("d/m/Y"); 

$expireddate=strtotime(str_replace('/', '-', $expireddate));
$today=strtotime(str_replace('/', '-', $today));

if ($expireddate<$today){
    echo 'expired date';
}
else
{
    echo 'uptodate';
}

?>

【讨论】:

    【解决方案2】:

    无需替换字符串中的字符或使用不推荐用于日期数学的strtotime()。 PHP 内置了一些工具,旨在让这类事情变得简单。

    您应该使用DateTime() 对象,因为它们具有可比性。但是,您将遇到的一个问题是您的日期格式不标准。当使用/ 作为分隔符时,PHP 将采用 MM/DD/YYYY 格式。所以你需要使用DateTime::createFromFormat() 来解决这个问题。

    $today   = new DateTime();
    $expires = DateTime::createFromFormat('d/m/Y', $query['expireddate']);
    
    if ($expires < $today){
        echo 'expired date';
    }
    else {
        echo 'uptodate';
    }
    

    建议:不要将日期作为字符串存储在数据库中。更重要的是,不要以非标准格式存储它们。在查询数据库时将日期转换为您想要的任何格式是简单,而且您可以利用数据库的所有日期功能,当它们是字符串时您无法做到(至少不必首先操作这些字符串,这会使事情变得更加复杂)。

    【讨论】: