Javascript Timezone给了我错误的时间

时间:2017-10-06 10:14:59

标签: javascript html

我有一个脚本可以为我提供所选时区的时间。

以下是代码:

选择:

<select id="ddlViewBy">
    <option value="-12.0">(GMT -12:00) Eniwetok, Kwajalein</option>
    <option value="-11.0">(GMT -11:00) Midway Island, Samoa</option>
    <option value="-10.0">(GMT -10:00) Hawaii</option>
    <option value="-9.0">(GMT -9:00) Alaska</option>
    <option value="-8.0">(GMT -8:00) Pacific Time (US &amp; Canada)</option>
    <option value="-7.0">(GMT -7:00) Mountain Time (US &amp; Canada)</option>
    <option value="-6.0">(GMT -6:00) Central Time (US &amp; Canada), Mexico City</option>
    <option value="-5.0">(GMT -5:00) Eastern Time (US &amp; Canada), Bogota, Lima</option>
    <option value="-4.0">(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz</option>
    <option value="-3.5">(GMT -3:30) Newfoundland</option>
    <option value="-3.0">(GMT -3:00) Brazil, Buenos Aires, Georgetown</option>
    <option value="-2.0">(GMT -2:00) Mid-Atlantic</option>
    <option value="-1.0">(GMT -1:00 hour) Azores, Cape Verde Islands</option>
    <option value="0.0">(GMT) Western Europe Time, London, Lisbon, Casablanca</option>
    <option value="+1">(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris</option>
    <option value="+2.0">(GMT +2:00) Kaliningrad, South Africa</option>
    <option value="+3.0">(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg</option>
    <option value="+3.5">(GMT +3:30) Tehran</option>
    <option value="+4.0">(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi</option>
    <option value="+4.5">(GMT +4:30) Kabul</option>
    <option value="+5.0">(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent</option>
    <option value="+5.5">(GMT +5:30) Bombay, Calcutta, Madras, New Delhi</option>
    <option value="+5.75">(GMT +5:45) Kathmandu</option>
    <option value="+6.0">(GMT +6:00) Almaty, Dhaka, Colombo</option>
    <option value="+7.0">(GMT +7:00) Bangkok, Hanoi, Jakarta</option>
    <option value="+8.0">(GMT +8:00) Beijing, Perth, Singapore, Hong Kong</option>
    <option value="+9.0">(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk</option>
    <option value="+9.5">(GMT +9:30) Adelaide, Darwin</option>
    <option value="+10.0">(GMT +10:00) Eastern Australia, Guam, Vladivostok</option>
    <option value="+11.0">(GMT +11:00) Magadan, Solomon Islands, New Caledonia</option>
    <option value="+12.0">(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka</option>
</select>
<button onclick="getTime()">Get Time</button>

和javascript函数:

function getTime() {

    var e = document.getElementById("ddlViewBy");
    var strUser = e.options[e.selectedIndex].value;

    var offset = strUser;

    var d = new Date();
    localTime = d.getTime();
    localOffset = d.getTimezoneOffset() * 60000;

    utc = localTime + localOffset;

    var nd = new Date(utc + (3600000*offset));

    utc = new Date(utc);

alert(nd.toLocaleString());

}

当我在选择它时选择伦敦(例如)它比我实际上提前一小时。

这可能与全年的时钟倒退有关吗?

如果是这样,我该如何处理?

2 个答案:

答案 0 :(得分:1)

是的,伦敦是格林尼治标准时间+0但是现在是夏令时,实际时间是GMT + 1.

如果我是你,我会尝试一种不同的方法,使用外部库,可以为你处理这些变化,这是一个很好的例子: Convert date to another timezone in JavaScript

因此,您只需在<select>上使用时区,而不是将值作为时差,而javascript将检索当前时间

答案 1 :(得分:0)

toLocaleString输出您当地的时间,并考虑到日期的时区偏差 您不希望使用该偏移量。

您需要使用Data对象的UTC getter手动构建输出字符串,例如Date.prototype.getUTCHours()