Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.05.2017, 14:31
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Date setTimezoneOffset method
Как всем известно, все методы даты работают только в контексте локального времени (пользователя) или UTC, но иногда хочется поработать в других контекстах (временных зонах), стандарт js забыл про антагониста для getTimezoneOffset, а я написал свой
/**
 * Set the timezone offset from the local timezone offset.
 * Argument "minutes" => -UTC±XX:XX, default = local offset.
 * Property "timezoneOffset" => last-set offset.
 * Return => milliseconds.
 */
Date.prototype.setTimezoneOffset = function(minutes) { 
	var _minutes;
	if (this.timezoneOffset == _minutes) {
		_minutes = this.getTimezoneOffset();
	} else {
		_minutes = this.timezoneOffset;
	}
	if (arguments.length) {
		this.timezoneOffset = minutes;
	} else {
		this.timezoneOffset = minutes = this.getTimezoneOffset();
	}
	return this.setTime(this.getTime() + (_minutes - minutes) * 6e4);
};

// Example

var date = new Date(), text = '\nExample\n\n';
// milliseconds
text += 'time1\t' + date.getTime() + '\n';
// UTC time
text += '  UTC\t' + date.toUTCString() + '\n';
// local time
text += 'local\t' + date + '\t' + date.timezoneOffset + '\n';
// -UTC-04:00 => 240
date.setTimezoneOffset(240);
text += 'set-4\t' + date + '\t' + date.timezoneOffset + '\n';
// -UTC+06:00 => -360
date.setTimezoneOffset(-360);
text += 'set+6\t' + date + '\t' + date.timezoneOffset + '\n';
// -UTC±00:00 => 0
date.setTimezoneOffset(0);    
text += 'set 0\t' + date + '\t' + date.timezoneOffset + '\n';
// no argument => reset
date.setTimezoneOffset();
text += 'reset\t' + date + '\t' + date.timezoneOffset + '\n';

// Warning
// .getTime() returns the offset time after .setTimezoneOffset(offset != local)

text += '\nWarning\n\n';
// true time
text += 'time2\t' + date.getTime() + '\t(offset == local)\t' + date.timezoneOffset + '\n';
// -UTC+03:33 => -213
date.setTimezoneOffset(-213);
// false time
text += 'time3\t' + date.getTime() + '\t(offset != local)\t' + date.timezoneOffset + '\n';
// compute true time
text += 'time4\t' + (date.getTime() - (date.getTimezoneOffset() - date.timezoneOffset) * 6e4) + '\tcomputed\n';

console.log(text);

Последний раз редактировалось Rise, 07.05.2017 в 16:36.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с информационым таймером Александр2233 Javascript под браузер 22 11.12.2019 12:31
Не правильно оторбражается меcяц в Date() oxxy Общие вопросы Javascript 6 22.01.2014 16:01
Проблема с возвратом Date() из coockie Speel Общие вопросы Javascript 3 01.11.2013 04:37
Время,не правильное отображение скриптов Visual Общие вопросы Javascript 0 29.10.2013 19:12
Обновление объекта Date (сокращение кода) HJ90 Элементы интерфейса 4 07.09.2013 20:58