繁体   English   中英

Unix时间戳和新西兰时区中上周的星期一和星期日

[英]Monday and Sunday of previous week in Unix timestamp AND in New Zealand timezone

我想知道在系统时钟(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时间戳。 https://zh.wikipedia.org/wiki/Unix_time

一些东西:

  • 您可以使用Moment-Timezone在Moment中使用IANA时区标识符

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

    • Pacific/Auckland覆盖新西兰大部分地区,在标准时间使用UTC + 12:00,在夏令时使用UTC + 13:00。
    • Pacific/Chatham覆盖了也是新西兰一部分的查塔姆群岛。 但是,Chatham在标准时间使用UTC + 12:45,在夏令时使用UTC + 13:45。
  • 您不需要转换为Date对象。 Moment可以直接为您提供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();

目前,这些分别返回15667344000001566648000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM