[英]moment-timezone parsing the given time zone
使用moment-timezone解析Date对象时遇到问题
我正在创建一个nodejs应用程序,该应用程序应该使用数据库中的任意时间检查新的Date()对象(并相应地执行)。 时间和时区保存在数据库中。
在例子中
time | timezone
11:00| US/Eastern
当REST调用到来时,我必须获取新的Date()对象并将其转换为给定的时区,并查看当前时间是否晚于上午9点。 但是服务器时区和持久时区并不相同。
我像这样创建今天的日期字符串
function getTodaysDate() {
var today = new Date(),
dd = today.getDate(),
mm = today.getMonth()+1,
yyyy = today.getFullYear();
if(dd<10) {
dd='0'+dd
}
if(mm<10) {
mm='0'+mm
}
return yyyy +'-' + mm + '-' + dd;
}
并尝试使用moment-timezone创建Timestamp对象
startTime = moment.tz(new Date(getTodaysDate() + ' ' + '11:00'), 'US/Eastern');
但框架正确地采用了日期并将其转换为美国/东部时区。
所以当我打印startTime.format();
我明白了
2016-08-01T07:00:00-04:00
而且我想
2016-08-01T11:00:00-04:00
那么有没有办法使用moment-timezone包来设置日期和时间,并将它们视为给定的时区?
您不需要任何Date
对象操作。 从理论上讲,你应该能够做到:
var zone = 'US/Eastern'
var time = '11:00'
var result = moment.tz(time, 'HH:mm', zone).format();
但是,有一个已知的错误 ,它使用UTC当前日期而不是时区的当前日期。 在它修复之前,你必须这样做:
var zone = 'US/Eastern'
var time = '11:00'
var s = moment.tz(zone).format('YYYY-MM-DD') + ' ' + time;
var m = moment.tz(s, zone);
var result = m.format();
(这假设您的输入time
值为HH:mm
格式)
所以问题是
startTime = moment.tz('here the date goes', 'US/Eastern');
是期望ISO格式还是手动格式化(我的语法不为我所知)或Date()对象。 我第一次尝试这个
2016-08-01 11:00
时刻图书馆抱怨(我上任时会发布完整的错误信息)。
添加T.
startTime = moment.tz('2016-08-01T11:00', 'US/Eastern');
我讨厌时间库和我们如何追踪时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.