PHP 的时间和日期比较无法使用 date()

PHP's time and date comparison not working using date()

我想在我的输入表单中添加验证规则,这样人们就不能选择比今天早的日期,但出于某种原因,我的操作员没有像他们应该的那样工作……至少我认为他们没有

//plain use of comparison operators
$a = 4; $b = 4;
if($a <= $b) { echo "umm?"; } // this return true

date_default_timezone_set('Europe/Copenhagen');
$timezone = date_default_timezone_get();
$today = date("d/m/y");

if(!empty($date['dateA']) && (date($date['dateA']) <= $today)) {

现在最后一个 if 语句正在获取 $today 值,其格式与 $date 数组格式相同。

这就是让我发疯的原因……如果:

$today = 08/02/2015

$date = 07/02/2015return是真的 $date = 08/02/2015 returns false 为什么这个 returning true?

当我使用 <= 来确保 $date 不能高于 $today 时,为什么 $date <= $today 不会 [=41] =] true 当他们有相同的值时? 据我所知,它的行为或多或少像 $date < $today

此外,我尝试使用 strtotime 而不是 $date 的日期,但它仍然表现相同....

那怎么办?

目前它首先检查较小的日期数字,而它应该首先检查年份,因为字符串比较一次检查 1 个字符,从左到右。

您可以将日期格式存储在 year/month/day 中以解决此问题,但这样做有点丑陋。

我建议使用时间戳,这是自 1970 年 1 月 1 日格林威治标准时间 00:00:00 以来的秒数,可以在 PHP 中通过调用 time() 获取当前时间戳。您可以通过调用 strtotime() 检索特定日期的时间戳。

我不知道你为什么要坚持字符串比较。我建议对数学数字使用数学运算。

这样做:

if(strtotime($date) < time())
{
   // then allow doing something
}

strtotime() 将您已有的日期字符串(例如:"22/5/2014")转换为整数时间戳。 time() 还有 returns 今天的时间戳。然后,您可以使用这两个数字进行操作。

虽然以上完全有效,但您还可以使用 PHP 中的日期对象,它非常精确并且隐式计算闰年等内容

PHP 文档中的示例:

<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>

在此处阅读更多内容: http://php.net/manual/en/datetime.diff.php

您目前正在使用字符串比较,这不是比较日期的推荐方法。不过,我不知道为什么相等性检查失败,但我认为您应该改用 DateTime 对象:http://php.net/manual/en/class.datetime.php(仅当您使用 PHP >= 5.2.2 时,因为 PHP 手册说 DateTime 比较在以前的版本中不能正常工作)

在您的情况下,最后一行将变为: if(!empty($date['dateA']) && DateTime::createFromFormat('d/m/Y', $date['dateA']) <= DateTime::createFromFormat('d/m/Y', $today))