Moment позволит вам сделать это довольно легко:
function getUTCMidnightMillis(timezone, days_ago) {
return moment() // Current time.
.tz(timezone) // Convert to desired timezone.
.subtract(days_ago, 'days') // Go back x days.
.startOf('day') // Get start of day, aka Midnight!
.utc() // Convert value into UTC.
.valueOf() // Return milliseconds since unix epoch.
}
console.log("Midnight in Denver:", getUTCMidnightMillis("America/Denver", 0))
console.log("Midnight in New York:", getUTCMidnightMillis("America/New_York", 0))
Что дает результат:
Midnight in Denver: 1594274400000
Midnight in New York: 1594267200000
И действительно, вы можете убедиться, что это правильно:
new Date(1594274400000).toISOString()
// Produces: "2020-07-09T06:00:00.000Z"
9 июля 2020 года мы наблюдаем переход на летнее время в Денвере, поэтому смещение нашего UT C составляет -6 часов. Таким образом, указанная выше отметка времени (6:00 утра UT C) - это тот же момент, когда в Денвере полночь.