0

我有一个图表库,它期待日期值,就好像我已经调用过一样:

var utc = Date.UTC(2012, 1, 15);

但我的服务器正在返回日期字符串。给定“2/15/2012”的日期字符串,是否有一种简单的方法可以获得相同的调用结果Date.UTC(2012, 1, 15);

我在下面的工作,但我想知道是否有更简单的方法。

//correct result I'm shooting for
var utc = Date.UTC(2012, 1, 15);

//is there an easier way?
var d = new Date("2/15/2012");
var utc2 = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate());

console.log(utc, "  ===  ", utc2, (utc === utc2) ? "SWEET" : "DAMNIT");
4

3 回答 3

2

您可以拆分传入的字符串(我知道,这很恶心,但这是我能想到的唯一其他解决方案)。

var dstring = "2/15/2012".split("/");
var utc = Date.UTC(dstring[2], dstring[0]-1, dstring[1]);

月份的 -1 是为了抵消 0 索引月份。你甚至可以把它变成一个函数:

String.prototype.dateFromString = function() {
    var str = this.split("/");
    return [str[2], str[0]-1, str[1];
}

var dstring = "2/15/2012";
var utc = Date.UTC(dstring.dateFromString[0], dstring.dateFromString[1], dstring.dateFromString[2]);
于 2012-04-26T16:54:45.987 回答
2

如果日期始终采用m/d/y(或者至少还没有时区)格式,您可以附加' UTC'到它并使用getTime

var mdy = "2/15/2012";
var utc = new Date(mdy + " UTC").getTime();

console.log(utc == Date.UTC(2012, 1, 15));
于 2012-04-26T16:59:29.157 回答
1

一个班轮:

var utc = new Date(new Date('2012/02/30').toUTCString()).valueOf()
于 2012-04-26T17:03:30.637 回答