Углеродное сравнение даты неверно на 1 час - PullRequest
0 голосов
/ 11 марта 2020

Итак, мне это не кажется правильным. Когда сравниваются две даты с одним и тем же часовым поясом с разницей всего в одну минуту, это говорит о том, что разница составляет 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_time, так и Carbon::now(), это не , показывающее разницу в часах, если только не используется diffInMinutes() метод

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

Редактировать: Настройка хранимого времени на "2020-03" -10 09:27:37 EST "(примерно за 3 минуты до запуска сценария) это вывод:

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

1 Ответ

0 голосов
/ 11 марта 2020

Если вы постоянно используете один и тот же часовой пояс 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

Использование читаемого человеком времени зоны могут вызвать проблемы; лучше придерживаться того, что компьютеры распознают лучше всего.

...