Настройка часового пояса углерода не изменяет значение метки времени

#laravel #datetime #php-carbon

Вопрос:

Я пытаюсь получить метку времени из другого часового пояса в Carbon / Laravel. Что-то меняется, но не метка времени (использую ли я ->format('U') или ->timestamp )

 <?php

$datestring = '2021-05-29';
$date = CarbonCarbon::parse($datestring);

echo $date->format('H:i') . '<br>';
echo $date->timezone('Europe/London')->format('H:i') . '<br>';

echo $date->format('U') . '<br>';
echo $date->timezone('Europe/London')->format('U') . '<br>';

?>
 

Результаты:

 00:00
01:00
1622246400
1622246400
 

Детская площадка: https://laravelplayground.com/#/snippets/a62f40ea-38a8-4145-9851-5d061905cfa0

Ответ №1:

Метка времени из другого часового пояса, кроме UTC, не существует.

Метка времени по определению является числом секунд, так January 1st 1970 midnight UTC как «UTC» на самом деле явно указано в определении, она направлена на представление универсального момента времени, поэтому она необходима. Если у вас есть число секунд с другой даты (например, 1 января 1970 года по Гринвичу-5), это не отметка времени, это просто число секунд с произвольного момента, которое относится к вашей бизнес-логике, вы можете получить его с помощью:

 $date->diffInSeconds('1970-01-01 00:00:00 -05:00');
 

Но имейте в виду, что необходимость делать это-верный признак плохо локализованного приложения.