получить местное время Хельсинки независимо от местного часового пояса

#javascript #date #time #timezone

#javascript #Дата #время #Часовой пояс

Вопрос:

мне действительно нужно получить текущее время в Хельсинки и Москве, используя javascript, но независимо от местного часового пояса. Интересно, как это сделать? Может быть, у кого-нибудь есть пример?

Формат будет:

1 ноября 2011 21:31:00

Спасибо.

Ответ №1:

 // create Date object for current location
d = new Date();
// convert to msec since Jan 1 1970
localTime = d.getTime();
// obtain local UTC offset and convertto msec
localOffset = d.getTimezoneOffset() * 60000;
// obtain UTC time in msec
utc = localTime   localOffset;
// obtain and add destination's UTC time offset
// for example, Paris
// which is UTC   1.0 hours
offset = 1.0;  
paris = utc   (3600000*offset);
// convert msec value to date string
nd = new Date(paris);
document.writeln("Paris time is "   nd.toLocaleString()   "<br>");
 

(Извините, не знаю смещение Хельсинки, возможно, 2?)

Обратите внимание, что отрицательное возвращаемое значение из getTimezoneOffset() указывает, что текущее местоположение находится впереди UTC, в то время как положительное значение указывает, что местоположение находится позади UTC.

[править]
Это может работать лучше: (обратите внимание, что вам придется самостоятельно изменять формат из переменной recv’d helsinki

 function getTZTime (tzOffset) {
   local = new Date(); 
   off = ( local.getTimezoneOffset() ) * 60 * 1000;
   timeStamp = local.getTime()   off; 
   off  = 1000 * 60 * 60 * tzOffset;
   nd = new Date();
   nd.setTime( timeStamp );
   return (nd);
}

helsinki = getTZTime (2); // Helsinki is 2 TZ's from GMT
 

[/ править]

Комментарии:

1. я получаю следующую ошибку в консоли «Uncaught ReferenceError: utc не определен»

2. @lwburk — добавлена строка смещения для желаемого часового пояса

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

Ответ №2:

Следующая функция работает, когда вы заранее знаете смещение:

 var MOSCOW_OFF = 4; // hours
var MONTHS = ["January", "February", "March", "April", "May", "June", "July", 
              "August", "September", "October", "November", "December"];

// desired format => November 1, 2011 21:31:00
function getLocalTime(offset) {
    var d = new Date();
    d.setTime((new Date().getTime())   
              (d.getTimezoneOffset() * 60 * 1000)   // local offset
              (1000 * 60 * 60 * offset)); // target offset
    return MONTHS[d.getMonth()]   " "   d.getDate()   ", "   
            d.getFullYear()   " "   d.toTimeString().split(" ")[0];
}

getLocalTime(MOSCOW_OFF); // => "November 2, 2011 01:22:27"
 

Вышеуказанное всегда будет работать для Москвы, которая больше не соблюдает летнее время, но вам нужно знать, какое сейчас время года, чтобы создать эквивалентное универсальное решение для Хельсинки.

Комментарии:

1. ваша версия идеально соответствует моему формату. Спасибо. Как вы думаете, если я просто добавлю смещение 2 (которое является Хельсинки), этого достаточно или потребуется больше работы? Что-то вроде var HEL_OFF = 2; …. GetLocalTime(HEL_OFF);

2. @Alex — На данный момент это сработает, потому что в Хельсинки сейчас не летнее время, но с 27 марта по 30 октября будет 3.

3. ваш код работает отлично, но вот проблема, которая не имеет смысла. Я нахожусь в Европе. Если я установлю смещение Москвы на 4, а Хельсинки на 2, я увижу правильное время, но некоторые (не все) пользователи сообщают, что время неверно и оно на 1 впереди. Имеет ли это какой-либо смысл для вас? Кроме того, спасибо за решение!