想要更改添加到Google日历的时间并转换美国圣安东尼奥的时间。
给出了值(它来自函数中的某个地方):
/*
eventDetail.eventTimings.startDate:"2017-04-14"
eventDetail.eventTimings.startTime:"05:18:00"
eventDetail.eventTimings.endDate:"2017-04-14"
eventDetail.eventTimings.endTime:"17:18:00"
*/
var startDateTime = new moment(eventDetail.eventTimings.startDate + " " + startT, 'yyyy-mm-dd H:mm:ss').toISOString().replace(/-|:|\.\d\d\d/g, "");
// Now startDateTime= "20170120T111800Z"
// But it should be startDateTime= "20170414T051800Z"
var endDateTime = new moment(eventDetail.eventTimings.endDate + " " + endT, 'yyyy-mm-dd H:mm:ss').toISOString().replace(/-|:|\.\d\d\d/g, "");
// endDateTime="20170120T231800Z"
// But it should be endDateTime=20170414T171800Z
查看快照:
答案 0 :(得分:1)
瞬间格式化令牌(以及大多数其他库,平台,语言等)区分大小写。
您使用了yyyy-mm-dd H:mm:ss
。您应该使用YYYY-MM-DD HH:mm:ss
。
此外,您不应在此使用toISOString
或replace
,而应使用Moment的format
功能。
var startDateTime = new moment(
eventDetail.eventTimings.startDate + " " + startT, 'YYYY-MM-DD HH:mm:ss')
.format('YYYYMMDD[T]HHmmss');
您还需要决定是否要在本地时间和UTC之间进行转换。在上面的函数中,输入和输出匹配,因为它们都在同一个本地时区。输出中没有Z
,因为输出不是UTC。
如果您希望将其转换为UTC,那么您可以这样做:
var startDateTime = new moment(
eventDetail.eventTimings.startDate + " " + startT, 'YYYY-MM-DD HH:mm:ss')
.utc()
.format('YYYYMMDD[T]HHmmss[Z]');