Javascript отображает различные часовые пояса

Следующий скрипт должен отображать текущее местное время на основе смещения -10 (Гавайи), но он не работает.

Не могу понять, где я ошибаюсь.

<h3>Current Time in Arizona is 
<script type="text/javascript">
<!--
    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()

    if (minutes < 10)
    minutes = "0" + minutes

    var suffix = "AM";
    if (hours >= 12) {
    suffix = "PM";
    hours = hours - 12;
    }
    if (hours == 0) {
    hours = 12;
    }

    document.write("<b>" + hours + ":" + minutes + " " + suffix + "</b>")
//-->
</script>
</h3>

person Millhorn    schedule 05.09.2013    source источник
comment
Это весь код? calcTime() вроде нигде не существует...   -  person Jeff Rupert    schedule 06.09.2013
comment
где определены hours или d?   -  person Krzysiek    schedule 06.09.2013
comment
Вам необходимо включить код для calcTime и определения hours и d.   -  person Geeky Guy    schedule 06.09.2013
comment
Ясно, что мне не нужно было минусовать. Мне нужна помощь! Очевидно, я что-то здесь упускаю. Я думаю, что document.Write(CalcTime('Hawaii', '-10')); должно быть document.Write(currentTime('Hawaii', '-10'));   -  person Millhorn    schedule 06.09.2013
comment
Итак, я обновил скрипт выше. То, что я пытаюсь сделать, это учесть изменение часового пояса, и я не могу понять это правильно. Вот jsfiddle   -  person Millhorn    schedule 06.09.2013


Ответы (2)


Прежде всего, код, который вы показали, просто возвращает текущее местное время. Он даже не пытается изменить его для определенного часового пояса.

Во-вторых, вам нужно прочитать вики тега часового пояса. В частности, прочитайте раздел «Часовой пояс! = Смещение».

Так уж случилось, что Аризона и Гавайи в настоящее время не используют летнее время, поэтому вы могли настроить смещение, если это были ваши единственные две проблемы. Но я уверен, что вы ищете более общее решение.

Чтобы сделать это правильно, вам понадобится библиотека, реализующая базу данных часовых поясов IANA. здесь я перечисляю некоторые из них. Например, вот пример отображения текущего времени в Лос-Анджелесе с помощью moment.js с moment-timezone:

moment().tz("America/Los_Angeles").format("h:mm a")

Если вы просто ищете быстрый и простой способ разместить на своем веб-сайте часы для определенного часового пояса, я рекомендую использовать бесплатное решение, предлагаемое timeanddate.com.

person Matt Johnson-Pint    schedule 06.09.2013

Напишите функцию для перемещения Даты на некоторое смещение в минутах/по вашему выбору

function offsetDate(offsetMinutes, d) {
    if (d) d = new Date(d);
    else d = new Date();
    if (offsetMinutes) d.setUTCMinutes(d.getUTCMinutes() + offsetMinutes);
    return d;
}
offsetDate(-10*60); // Thu Sep 05 2013 12:03:06 GMT+0100 (GMT Daylight Time)

Теперь используйте функции UTC, чтобы получить время

person Paul S.    schedule 05.09.2013
comment
Вы имеете в виду вот так? Date.UTC(year, month, day[, hours[, minutes[, seconds[,ms]]]]) Время — это единственное, что будет отображаться. Но он должен иметь возможность отображать время на основе состояния щелчка. Таким образом, при нажатии на Техас будет показано одно время, а в Калифорнии — другое время. Не уверен, как использовать функции UTC... - person Millhorn; 06.09.2013
comment
@webfrogs .getUTCMinutes(), .getUTCHours() и т. д. - person Paul S.; 06.09.2013
comment
По сути, я хочу сказать, что вместо того, чтобы пытаться переместить часовой пояс, настройте Date так, чтобы значения UTC соответствовали ожидаемому местному времени в этом часовом поясе, а затем прочитайте UTC время. - person Paul S.; 06.09.2013