碳日期对比错了1小时

Carbon date comparison wrong by 1 hour

所以,这对我来说似乎不对。当比较具有相同时区且仅相差一分钟的两个日期时,它告诉我相差 59 分钟。

date_default_timezone_set('America/New_York');   

$stored_time = "2020-03-10 07:37:37 PM EST"; //Aprox 1 minute before Carbon::now()
$stored_time = Carbon::createFromFormat('Y-m-d h:i:s A T', $stored_time, 'EST');
echo $stored_time . "\n";
echo Carbon::now() . "\n";
$minutes_difference = Carbon::now()->diffInMinutes($stored_time);

echo $minutes_difference;

我目前正在使用下面的解决方法,但这对我来说意义不大。此外,当我回显 $stored_timeCarbon::now() 时,它不会 显示 小时差异,除非使用 diffInMinutes() 方法

$stored_time = Carbon::createFromFormat('Y-m-d h:i:s A T', $stored_time, 'EST')->subHour(1);

编辑:将 stored_time 调整为“2020-03-10 09:27:37 PM EST”(在我 运行 脚本之前大约 3 分钟)这是输出:

stored_time: 2020-03-10 21:27:37
Carbon::now():2020-03-10 21:30:00
time(): 1583890200
minutes_difference: 57

如果您在代码中始终使用相同的 America/New_York 时区,您将获得预期的结果。

date_default_timezone_set('America/New_York');
$stored_time = "2020-03-11 12:25:00 AM America/New_York";
$stored_time = Carbon\Carbon::createFromFormat('Y-m-d h:i:s A T', $stored_time, 'America/New_York');
echo $stored_time . "\n";
echo Carbon\Carbon::now() . "\n";
$minutes_difference = Carbon\Carbon::now()->diffInMinutes($stored_time);
echo $minutes_difference;

输出:

2020-03-11 00:25:37
2020-03-11 00:24:58
0

使用人类可读的时区会导致问题;最好坚持计算机最能识别的内容。