Javascript Unix时间戳和新西兰时区中前一周的周一和周日

Javascript Unix时间戳和新西兰时区中前一周的周一和周日,javascript,timezone,momentjs,Javascript,Timezone,Momentjs,我想知道,当系统时钟(AWS Lambda)位于不同的时区时,在新西兰时区获取周一和周日的unix时间戳的最佳方法是什么 我试过下面的方法,它在我的本地计算机上运行得很好,但是很明显,当在AWS上执行时,它将是一个不同的时区 有人能建议处理时区的最佳方法,这样代码就可以在任何位置运行吗 var monday = moment().day(-13).startOf('day').toDate().getTime() // Monday last week var sunday = moment(

我想知道,当系统时钟(AWS Lambda)位于不同的时区时,在新西兰时区获取周一和周日的unix时间戳的最佳方法是什么

我试过下面的方法,它在我的本地计算机上运行得很好,但是很明显,当在AWS上执行时,它将是一个不同的时区

有人能建议处理时区的最佳方法,这样代码就可以在任何位置运行吗

var monday = moment().day(-13).startOf('day').toDate().getTime() // Monday last week
 var sunday = moment().day(-7).startOf('day').toDate().getTime() // Sunday last week

Unix时间戳始终以UTC表示时间,而不管您的位置如何。要获取您所在位置的本地时间,请将时区偏移量应用于unix时间戳

有几件事:

  • 您可以在当前使用

  • 新西兰有两个不同的IANA时区标识符:

    • Pacific/Auckland
      覆盖新西兰大部分地区,标准时间使用UTC+12:00,夏令时使用UTC+13:00
    • Pacific/Chatham
      涵盖查塔姆群岛,它也是新西兰的一部分。但是,查塔姆在标准时间使用UTC+12:45,在夏令时使用UTC+13:45
  • 您不需要转换为
    日期
    对象。矩可以直接给您一个Unix时间戳,可以使用
    .Unix()
    以秒为单位,也可以使用
    .valueOf()
    以毫秒为单位。两者都意味着转换为UTC,因为Unix时间戳本质上是基于UTC的

  • 一个人不能得到一整天的Unix时间戳,而只能得到一个时间点的时间戳。您可能要查找的时间戳是在当地一天的开始,在新西兰总是午夜(
    00:00
    )(但不一定在DST过渡日的其他时区,具体取决于过渡时间)

  • 当使用Moment的
    day
    功能时,
    day(-13)
    并不表示“上周的星期一”。它的意思是“两个星期一以前”。如果你的意思是“一个星期一以前”,那就是
    day(-6)
    。同样地,
    day(-7)
    的意思是“一个星期日之前。在这两种情况下,它都不计算当前日期。例如,由于今天是2019-09-01的星期日,
    day(-7)
    指的是2019-08-25的星期日

综上所述:

var oneMondayAgoInAuckland = moment.tz('Pacific/Auckland').day(-6).startOf('day').valueOf();
var oneSundayAgoInAuckland = moment.tz('Pacific/Auckland').day(-7).startOf('day').valueOf();
目前,它们分别返回
156673440000
15666648000000