[英]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();
目前,这些分别返回1566734400000
和1566648000000
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.