Укажите время для пользователей в нескольких часовых поясах (особенно США / Канада) - PullRequest
0 голосов
/ 25 апреля 2018

Я реализую средство регистрации, которое отправляет ссылку с токеном в нем - токен действителен в течение 1 часа. Поэтому в письме (скажем, сейчас 14:20) я хочу сказать:

Вы должны перейти по этой ссылке 15: 30

Аудитория этого сайта будет в Ирландии / Великобритании, США / Канаде и, возможно, некоторых в Европе - поэтому я хотел бы перечислить время истечения в нескольких часовых поясах, которые эти (не технические) люди поймут.

Так вот что я придумал

Click by:

Ireland/UK > 25 Apr 2018 13:59
CET (Berlin) > 25 Apr 2018 14:59

Pacific (Los Angeles) > 25 Apr 2018 05:59

Mountain (Denver) > 25 Apr 2018 06:59

Central (Chicago) > 25 Apr 2018 07:59

Eastern (New York) > 25 Apr 2018 08:59

Теперь я понимаю, что Денвер в настоящее время является MDT (и MST зимой), но здесь, в Ирландии, мы сейчас находимся в IST (UTC + 1) или GMT зимой / осенью - но если вы спросите случайного человека в каком часовом поясе мы находимся, в лучшем случае вы получите GMT ​​как ответ круглый год. Итак, я перечислил время там как общий «Гора» и приведу пример города.

Как этот подход для людей в США / Канаде?

Мой код ниже, а вот прямая ссылка

<?php
$exipry = 60*60 + time();

$now_obj       = new DateTime(date("Y-m-d H:i:s", $exipry));

$now_obj->setTimezone(new DateTimeZone('Europe/Dublin'));
$now_hour_from_IRELAND_datetime = $now_obj->format('d M Y H:i');


$now_obj->setTimezone(new DateTimeZone('Europe/Berlin'));
$now_hour_from_CET_datetime = $now_obj->format('d M Y H:i');

$now_obj->setTimezone(new DateTimeZone('America/Los_Angeles'));
$now_hour_from_pacific_datetime = $now_obj->format('d M Y H:i');

$now_obj->setTimezone(new DateTimeZone('America/Denver'));
$now_hour_from_mountain_datetime = $now_obj->format('d M Y H:i');

$now_obj->setTimezone(new DateTimeZone('America/Chicago'));
$now_hour_from_central_datetime = $now_obj->format('d M Y H:i');

$now_obj->setTimezone(new DateTimeZone('America/New_York'));
$now_hour_from_eastern_datetime = $now_obj->format('d M Y H:i');

print("<h1>1 hour from now is:</h1>");
print("Ireland/UK  > $now_hour_from_IRELAND_datetime<p>");
print("CET (Berlin) > $now_hour_from_CET_datetime<p>");
print("Pacific (Los Angeles) > $now_hour_from_pacific_datetime<p>");
print("Mountain (Denver) > $now_hour_from_mountain_datetime<p>");
print("Central (Chicago) > $now_hour_from_central_datetime<p>");
print("Eastern (New York) > $now_hour_from_eastern_datetime<p>");

?>

1 Ответ

0 голосов
/ 25 апреля 2018

выглядит правильно для меня.

Не забудьте также проверить на «Азия / Калькутта». Это хороший тест, потому что смещение его часового пояса составляет полчаса.

То же самое для "Америки / Феникса", потому что они остаются на стандартном времени весь год.

Обычно такие приложения просят каждого пользователя указать имя часового пояса во время регистрации. (Но многие пользователи не беспокоятся)

В США, когда мы хотим указать часовой пояс таким образом, чтобы он не изменялся между летом и зимой, мы говорим «Восточное время», «Центральное время», «Горное время», «Тихоокеанское время, и время Гавайев и Аляски. У канадцев также есть «Атлантическое время» («Америка / Галифакс»). В Аризоне («Америка / Феникс») говорят «Аризонское время».

...