Если вы создаете локальный объект даты, он будет находиться в часовом поясе локальной системы (независимо от того, какой это может быть установлен, который не может быть фактическим местным часовым поясом). У объектов даты есть метод getTimezoneOffset , который возвращает число в минутах, которое при добавлении к локальному объекту даты устанавливает его в UTC (по существу, по Гринвичу). Затем вы можете вычесть смещение для «центрального времени» (каким бы оно ни было), чтобы получить время в этом часовом поясе.
Затем вы можете использовать этот объект даты для времени в этой зоне.
Если часовой пояс является центральным часовым поясом США, стандартное смещение составляет -6 часов, смещение на летнее время составляет -5 часов. Функция, которая возвращает объект даты с определенным смещением:
/* Create a date object with the desired offset.
Offset is the time that must be added to local time to get
UTC, so if time zone is -6hrs, offset is +360. If time zone
is +10hrs, offset is -600.
*/
function getOffsetDate(offsetInMintues) {
// Get local date object
var d = new Date();
// Add local time zone offset to get UTC and
// Subtract offset to get desired zone
d.setMinutes(d.getMinutes() + d.getTimezoneOffset() - offsetInMintues);
return d;
}
Дайте ему соответствующее смещение, и он вернет объект даты с этим смещением. Чтобы получить стандартное центральное время США:
var centralDate = getOffsetDate(360);
Для централизованного перехода на летнее время в США:
var centralDSTDate = getOffsetDate(300);
Чтобы сделать что-то между определенным временем, вы можете сделать что-то вроде:
var h = centralDate.getHours();
var m = centralDate.getMinutes();
if (h >= 20 ||
h <7 ||
(h == 7 && m <= 30) {
// the time is between 20:00 and 07:30 the following day.
}