#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 впереди. Имеет ли это какой-либо смысл для вас? Кроме того, спасибо за решение!