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

19

我开始在我的应用程序中使用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";
    }

原始的 $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

显然所选日期不晚于白名单日期,但if语句仍返回true并输出“proceed”。我一遍又一遍地检查了代码,但是我看不出哪里出了问题。


$chosen_date在进入构造函数之前会输出什么? - Juan Bonnett
它会回显表单输入,例如 09/22/2015 9:36 PM - 使用此格式。 - AP 2022
2个回答

21

可能是因为时区不同,所以请尝试这样做。

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

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

记住你可以随时构建实例并为其设置时区:

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

$whitelist_date = $date->now();

有没有什么技巧可以管理不同时区的用户数据?

你可以创建带有不同时区的不同对象。试试这个方法并观察结果。

$london_date = new Carbon($chosen_date_from_london, 'Europe/London');
$colombia_date = new Carbon($chosen_date_from_colombia, 'Bogota/America');

假设你将它们进行比较:

$are_different = $london_date->gt($colombia_date);
var_dump($are_different); //FALSE

不,它们并不不同,尽管当你盯着时钟看,在世界的不同地方它们显示的时间不同,但它们仍然处于同一个当前时刻,即“现在”。

你可以创建不同的Carbon()对象或实例,并使用$instance->setTimeZone(TimeZone)来设置不同的时区。


谢谢,我会开始做的! - AP 2022

0

或者尝试使用以下的代码:

if ($chosen_date->gte($whitelist_date))

1
没有区别。 - AP 2022

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接