Как задать часовой пояс в javascript? (set timezone offset javascript Date)

483
26 ноября 2016, 17:57

Браузер жестко задает часовой пояс обьектам даты исходя из настроек часового пояса операционной системы. Но в некоторых приложениях необходимо чтобы все пользователи сайта видели буквально одно и то же время, с какого бы места на земном шаре они бы не зашли. Как можно в ручную задать смещение часового пояса в javascript? Чтобы оно автоматически применилось ко всем обьектам Date?

Answer 1

Воспользуйтесь библиотекой moment.js.

В ней это делается легко и просто:

var message = "Московское время: " + moment().utcOffset(3).format("HH:mm")
Answer 2

Я написал крутой полифилл специально для себя и вас! Добавляет столь желанную функцию Date.setTimezoneOffset() Удивительно что подобное изначально не встроенно в браузер и яваскрипт. Вот он, можете лайкнуть :3 https://github.com/uMaxmaxmaximus/date-timezone

Пример использования:

// Установить смещение таймзоны для всех дат
Date.timezoneOffset(-240) // +4 UTC
// Установить смещение таймзоны только для данной даты
(new Date).timezoneOffset(-180) // +3 UTC

Coffeescript версия:

do ->   
    # tmp date
    offsetDate = new Date()
    # default timezone
    Date.prototype.timezoneOffset = offsetDate.getTimezoneOffset()

    Date.setTimezoneOffset = (timezoneOffset)->
        return @prototype.timezoneOffset = timezoneOffset

    Date.getTimezoneOffset = (timezoneOffset)->
        return @prototype.timezoneOffset

    Date.prototype.getTimezoneOffset = ->
        return @timezoneOffset

    Date.prototype.setTimezoneOffset = (timezoneOffset)->
        return @timezoneOffset = timezoneOffset

    Date.prototype.toString = ->
        offsetTime = @timezoneOffset * 60 * 1000
        offsetDate.setTime(@getTime() - offsetTime)
        return offsetDate.toUTCString()

    [
        'Milliseconds', 'Seconds', 'Minutes', 'Hours',
        'Date', 'Month', 'FullYear', 'Year', 'Day'
    ]
    .forEach (key)=>
        Date.prototype["get#{key}"] = ->
            offsetTime = @timezoneOffset * 60 * 1000
            offsetDate.setTime(@getTime() - offsetTime)
            return offsetDate["getUTC#{key}"]()
        Date.prototype["set#{key}"] = (value)->
            offsetTime = @timezoneOffset * 60 * 1000
            offsetDate.setTime(@getTime() - offsetTime)
            offsetDate["setUTC#{key}"](value)
            time = offsetDate.getTime() + offsetTime
            @setTime(time)
            return time

Скомпилированная версия:

(function() {
  var offsetDate;
  offsetDate = new Date();
  Date.prototype.timezoneOffset = offsetDate.getTimezoneOffset();
  Date.setTimezoneOffset = function(timezoneOffset) {
    return this.prototype.timezoneOffset = timezoneOffset;
  };
  Date.getTimezoneOffset = function(timezoneOffset) {
    return this.prototype.timezoneOffset;
  };
  Date.prototype.getTimezoneOffset = function() {
    return this.timezoneOffset;
  };
  Date.prototype.setTimezoneOffset = function(timezoneOffset) {
    return this.timezoneOffset = timezoneOffset;
  };
  Date.prototype.toString = function() {
    var offsetTime;
    offsetTime = this.timezoneOffset * 60 * 1000;
    offsetDate.setTime(this.getTime() - offsetTime);
    return offsetDate.toUTCString();
  };
  return ['Milliseconds', 'Seconds', 'Minutes', 'Hours', 'Date', 'Month', 'FullYear', 'Year', 'Day'].forEach((function(_this) {
    return function(key) {
      Date.prototype["get" + key] = function() {
        var offsetTime;
        offsetTime = this.timezoneOffset * 60 * 1000;
        offsetDate.setTime(this.getTime() - offsetTime);
        return offsetDate["getUTC" + key]();
      };
      return Date.prototype["set" + key] = function(value) {
        var offsetTime, time;
        offsetTime = this.timezoneOffset * 60 * 1000;
        offsetDate.setTime(this.getTime() - offsetTime);
        offsetDate["setUTC" + key](value);
        time = offsetDate.getTime() + offsetTime;
        this.setTime(time);
        return time;
      };
    };
  })(this));
})();
READ ALSO
JavaScript: Получить позицию символа в строке

JavaScript: Получить позицию символа в строке

Реализую функцию, которая принимает строку и возвращает позицию каждого символа в этой строке

380
Помогите с push уведомлениями браузера

Помогите с push уведомлениями браузера

Хочу обучиться создавать push без сервисов

264
Ajax - живой поиск (проблемы с кодом)

Ajax - живой поиск (проблемы с кодом)

Делал урок по Ajax поиску, когда вбиваю слово,оно должно проверяться через array в php файле и показывать есть ли оно или нет в array, но в результате...

336
Получить иконку с openweathermap

Получить иконку с openweathermap

Есть запрос погоды на сайт openweathermapВ JSON ответе есть в поле weather

210