PHP碳检查选择日期是否大于其他日期

aqq*_*aqq 14 php validation datetime php-carbon

我已经开始将PHP Carbon用于我的应用程序,因为它似乎比使用和操作DateTime类的日期/时间容易得多.我想要做的是检查所选日期($ chosen_date)是否大于另一个日期($ whitelist_date).我在下面的代码中试过这个:

    $chosen_date = new Carbon($chosen_date);

    $whitelist_date = Carbon::now('Europe/London');
    $whitelist_date->addMinutes(10);

    echo "Chosen date must be after this date: ".$whitelist_date ."</br>";
    echo "Chosen Date: ".$chosen_date ."</br>";

    if ($chosen_date->gt($whitelist_date)) {

        echo "proceed"; 
    } else {
        echo "dont proceed";
    }
Run Code Online (Sandbox Code Playgroud)

原始的$ chosen_date值来自POST数据.这是我得到的输出:

Chosen date must be after this date: 2015-09-22 21:21:57
Chosen Date: 2015-09-22 21:01:00
proceed
Run Code Online (Sandbox Code Playgroud)

显然,所选日期不大于白名单日期,但仍然if语句返回true并且echo为"proceed".我一遍又一遍地对代码进行了检查,但我看不出哪里出错了.

Jua*_*ett 13

它可能.....时区不一样,所以试试吧

$chosen_date = new Carbon($chosen_date, 'Europe/London');

$whitelist_date = Carbon::now('Europe/London');
$whitelist_date->addMinutes(10);
Run Code Online (Sandbox Code Playgroud)

请记住,您始终可以构造实例并为其设置时区:

$date = new Carbon();
$date->setTimezone('Europe/London');

$whitelist_date = $date->now();
Run Code Online (Sandbox Code Playgroud)

有关如何为不同时区的用户管理数据的任何提示?

您可以使用不同的时区创建不同的对象.试试这个并玩结果.

$london_date = new Carbon($chosen_date_from_london, 'Europe/London');
$colombia_date = new Carbon($chosen_date_from_colombia, 'Bogota/America');
Run Code Online (Sandbox Code Playgroud)

让我们说你比较它们:

$are_different = $london_date->gt($colombia_date));
var_dump($are_different); //FALSE
Run Code Online (Sandbox Code Playgroud)

不,他们并没有什么不同,虽然他们盯着时钟和世界不同地区的时间不同,他们现在仍然处于同一时刻.

你去,只是创建不同的对象或Carbon()的实例,并设置不同的时区使用 $instance->setTimeZone(TimeZone);