对ISO字符串的moment.js弃用警告?

时间:2014-11-24 15:56:49

标签: momentjs

我使用moment.js库获得了以下javascript代码。我们一直遇到与utc转换的问题。 下面的代码返回此结果:

Deprecation warning: moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. 
    Please refer to https://github.com/moment/moment/issues/1407 for more info.
1: 2014-11-17T19:16:00+00:00
2: 2014-11-17T19:16:00+00:00
3: 2014-11-17T13:16:00-06:00

为什么第一个返回相同但是给出了已弃用的警告?我正在使用ISO字符串。

代码:

var r = {Start:'2014-11-17T20:47:00Z', End:'2014-11-17T19:16:00Z'};

console.log(moment(r.Start).local()); 

            var e = moment(r.Start);
            var f = moment(r.End);

 var res = {exDate:      moment(e).format("MM/DD/YYYY"),
            exStartTime: moment(e).format("MM/DD/YYYY hh:mm A"),
            exEndTime:   moment(f).format("MM/DD/YYYY hh:mm A")}

console.log(res );                   
console.log("1: " + moment(res.exEndTime).utc().format());
console.log("2: " + moment.utc(res.exEndTime).format());
console.log("3: " + moment(res.exEndTime).format()); // testing default local format.

2 个答案:

答案 0 :(得分:2)

错误是因为包装日期已经包含了片刻。 你应该使用这样的时刻:

var r = {Start:'2014-11-17T20:47:00Z', End:'2014-11-17T19:16:00Z'};
console.log(moment(r.Start).local()); 

var e = moment(r.Start);
var f = moment(r.End);

var res = {
    exDate: e.format("MM/DD/YYYY"),
    exStartTime: e.format("MM/DD/YYYY hh:mm A"),
    exEndTime: f.format("MM/DD/YYYY hh:mm A")
}

console.log(res );                   
console.log("1: " + f.utc().format());
console.log("2: " + f.format());
console.log("3: " + f.format()); // testing default local format.

答案 1 :(得分:1)

错误由最后三行产生。例如,当您致电moment(res.exEndTime)时,已经是格式为MM/DD/YYYY hh:mm A的字符串。您还在冗余地调用moment。基本上,你有:

moment(moment(moment('2014-11-17T19:16:00Z')).format("MM/DD/YYYY hh:mm A")).format()

那太多时刻了!