我在.toISOString()的帮助下更改了ISO格式的startDate和endDate但它给了我错误的输出

时间:2017-01-20 11:55:54

标签: angularjs timezone momentjs

想要更改添加到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

查看快照:

enter image description here

1 个答案:

答案 0 :(得分:1)

瞬间格式化令牌(以及大多数其他库,平台,语言等)区分大小写。

您使用了yyyy-mm-dd H:mm:ss。您应该使用YYYY-MM-DD HH:mm:ss

此外,您不应在此使用toISOStringreplace,而应使用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]');