момент узла - endOf ('день') для определенного часового пояса - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу создать моментный объект на 23:59:59 сегодня, для определенного часового пояса, например Азия / Иерусалим

работает moment().endOf('day').utc('Asia/Jerusalem')

возвращает moment.utc("2019-04-17T23:59:59.999+00:00")

Что нехорошо, потому что 23:59 UTC + 0! = 23:59 UTC + 2 (часовой пояс Иерусалима)

установка часового пояса по умолчанию, т.е. process.env.TZ = 'Asia/Jerusalem', решает его, но я не хочу менять env процесса каждый раз, когда мне это нужно.

Как создать моментный объект с фиксированным часовым поясом?

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Вы должны использовать moment-timezone для этого.

const moment = require('moment-timezone');

const dt = moment().tz('Asia/Jerusalem').endOf('day');

dt.toISOString(); // 2019-04-17T20:59:59.999Z
dt.format(); // 2019-04-17T23:59:59+03:00

Да, Asia/Jerusalem сейчас равно +03:00.

0 голосов
/ 17 апреля 2019

Я думаю, что вы можете использовать это, чтобы получить конец дня в любом часовом поясе без использования какой-либо большой библиотеки или устаревшего смещения часового пояса, хотя иногда нужно обновлять

var date = new Date()
var options = {
  // hour: 'numeric', minute: 'numeric', second: 'numeric',
  year: 'numeric', month: 'numeric', day: 'numeric',
  // hour12: false,
  timeZoneName: 'short',
  timeZone: 'Asia/Jerusalem'
};
var date = new Intl.DateTimeFormat('xx-XX', options)
  .format(date).split(' ') // [date, offset]

date = `${date[0]} 23:59:59:999 ${date[1]}` // use end of day
  

// end of day in Asia/Jerusalem
console.log(date)
date = new Date(date)

// end of day in Asia/Jerusalem with no timezone
console.log(date)


// end of day in Asia/Jerusalem with our local timezone
console.log(date.toLocaleDateString(), date.toLocaleTimeString())
...