【问题标题】:PHP dates not quite workingPHP 日期不太好用
【发布时间】:2017-01-04 20:52:23
【问题描述】:

在 php 日期中使用逻辑运算符并不完全正确。可以得出2016年在2017年之前,但无法实现当月1号在4号之前。

我已经注意到这种错误有一段时间了:如何最好地修复和避免它?

$date_extra_early = date("2017-01-1 07:30:00");
$today = date("Y-m-d H:i:s");
var_dump($today);
var_dump($date_extra_early);
if ($today>$date_extra_early)
                    echo("today is greater than date extra early\n");
else echo("today is less than date extra early\n");

输出

string(19) "2017-01-04 14:50:32" string(18) "2017-01-1 07:30:00" 今天 比日期更早

【问题讨论】:

  • 您是否尝试过使用正确的日期时间值作为输入? $date_extra_early = date("2017-01-01 07:30:00");
  • @feeela 好的,前导零使该逻辑语句起作用,但这不仅仅是一个错字。我注意到日期的可靠性非常不稳定。我曾经依赖它的时候,它已经灾难性地分崩离析了。想知道是否有办法帮助保证它按预期工作。
  • 目前无法测试,但请尝试if ( strtotime("$today") > strtotime("$date_extra_early")) ...

标签: php apache time logical-operators


【解决方案1】:

您可以比较 DateTime 对象而不是字符串(后者由 date() 返回)。 ==, <, >, <=, >= 的逻辑操作确实像使用 DateTime 对象的魅力一样工作。此外,DateTime 构造函数了解许多不同的输入格式,并且还有助于处理格式错误的输入。

$earlydate = new DateTime('2017-01-1 07:30:00');
$today = new DateTime('now');

if($today > $earlydate)
    echo 'today is greater than date extra early';
else
    echo 'today is less than date extra early';

另请参阅:http://php.net/manual/en/class.datetime.php

【讨论】:

  • 日期和日期时间有什么区别?
  • 这个时候你应该自己想想,“我应该查阅手册”。
【解决方案2】:

您需要以正确的datetime 格式指定日期

$date_extra_early = date("2017-01-01 07:30:00");
                                //^missing a leading 0 here

demo

或者您可以将您的日期转换为整数并进行比较

if (strtotime($today)>strtotime($date_extra_early)) {
    echo("today is greater than date extra early\n");
} else { 
    echo("today is less than date extra early\n");
}

在这两种情况下都会打印

今天比日期早

demo

【讨论】:

  • 不正确,date()函数的第一个参数是格式字符串。没有任何格式字符,该函数不做任何事情,所以它只是输出输入。
【解决方案3】:

您确实必须为 date() 使用正确的格式。 在这种情况下,您缺少 1(天)前面的前导 0

$date_extra_early = date("2017-01-01 07:30:00");
$today = date("Y-m-d H:i:s");
var_dump($today);
var_dump($date_extra_early);
if ($today>$date_extra_early)
  echo("today is greater than date extra early\n");
else 
  echo("today is less than date extra early\n");

输出:

string '2017-01-04 22:00:57' (length=19)
string '2017-01-01 07:30:00' (length=19)
today is greater than date extra early

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多