Как отмечено в моем комментарии, вы можете использовать new Date().toLocaleString('en-US', {timeZone: 'America/Denver'})
в зависимости от потребностей поддержки вашего браузера, но вы должны знать, что toLocaleString
локали и опции могут не поддерживаться в Edge и не поддерживатьсяв веб-обозревателе Android .
Чтобы выполнить свою функцию до завершения и преобразовать время UTC в горное время (либо стандартное время горы, либо летнее время горы в зависимости от времени года), вам придется продлитьфункция для обработки летнего времени.Например (именно поэтому такие библиотеки, как Moment.js так популярны, и, возможно, стоит обратить внимание на ваши потребности):
const twoDigit = (d) => (d < 10 ? '0' : '') + d;
const getMountainTime = () => {
let d = new Date(); // current datetime
let year = d.getUTCFullYear(); // utc year
let month = d.getUTCMonth(); // utc month (jan is 0)
let date = d.getUTCDate(); // utc date
let hour = d.getUTCHours(); // utc hours (midnight is 0)
var minute = d.getUTCMinutes(); // utc minutes
var second = d.getUTCSeconds(); // utc seconds
let day = d.getUTCDay(); // utc weekday (sunday is 0)
let offset = 6; // assume MDT to start
let adjust = 1; // offset adjustment at DST
let mar = (month === 2); // march boolean
let nov = (month === 10); // november boolean
// handle march and november (DST change months)
if (mar || nov) {
if (mar) {
offset = 5; // assume EST to start
adjust = -1; // DST adjustment to EDT
}
// handle offset shift to prior day
if (hour - offset < 0) {
date -= 1;
day -= 1;
}
// handle date ranges when DST change may or may not have occurred yet
if ((mar && date > 7 && date < 15) || (nov && date < 8)) {
// DST adjustment on or after DST sunday at 2:00am
if (date >= date - day && hour - offset >= 2) {
offset += adjust;
}
// DST adjustment for dates after DST change has already occured
} else if ((mar && date > 14) || (nov && date > 7)) {
offset += adjust;
// handle MDT to MST offset shift to prior day (not already handled above)
if (nov && hour === 4) {
date -= 1;
day -= 1;
}
}
// handle months without DST changes
} else {
// MDT to MST adjustment for MST months
if (month < 2 || month > 10) {
offset += adjust;
}
// handle offset shift to prior day
if (hour < offset) {
day -= 1;
}
}
let mm = twoDigit(month + 1);
let dd = twoDigit(date);
let hh = twoDigit(hour);
let mn = twoDigit(minute);
let ss = twoDigit(second);
return mm + '/' + dd + '/' + year + ' ' + hh + ':' + mn + ':' + ss
}
let denver = getMountainTime();
console.log(denver);