4

我有一个 WCF 服务,可以为我的 javascript 提供一些日期。我想操纵日期,但它在 javascript 中看起来像这样:

/Date(1361145600000+0000)/

我知道这是自 1970/01/01 以来的毫秒数,但我无法弄清楚如何将其转换为 javascript 日期。

我是否需要使用正则表达式或修剪文本来提取毫秒,然后像这样使用它:

new Date(miliseconds)

当然必须有更简单的方法吗?

4

4 回答 4

5

如果“+0000”是标准时区偏移量,则前 2 位是小时,后两位是分钟。

大概它并不总是'0000'-

您需要将 UTC 的毫秒差添加(或减去)到第一个整数部分以返回正确的日期。

   function timeconvert(ds){
        var D, dtime, T, tz, off,
        dobj= ds.match(/(\d+)|([+-])|(\d{4})/g);
        T= parseInt(dobj[0]);
        tz= dobj[1];
        off= dobj[2];
        if(off){
            off= (parseInt(off.substring(0, 2), 10)*3600000)+
(parseInt(off.substring(2), 10)*60000);
            if(tz== '-') off*= -1;
        }
        else off= 0;
        return new Date(T+= off).toUTCString();
    }
    timeconvert('Date(1361145600000)+0000');

//返回值:(字符串UTC)

格林威治标准时间 2013 年 2 月 18 日星期一 00:00:00

如果日期始终为 UTC('+0000'),您可以从字符串中提取有效数字 -

    function timeconvert(ds){
        var d=ds.match(/(\d+)/)[1];
        return new Date(+d).toUTCString();
    }
    timeconvert('Date(1361145600000)+0000)');

// returned value: (String UTC)

Mon, 18 Feb 2013 00:00:00 GMT
于 2013-02-13T18:17:03.820 回答
3

kennebec 提出的代码有一个错误,其日期低于 1​​970 年 1 月 1 日。例如,Date(-124054000000+0300) 是 Wed Jan 26 1966 07:33:20

固定代码: http ://output.jsbin.com/cejolu/3/edit?js,console

function timeconvert(ds){
    var D, dtime, T, tz, off,
        dobj = ds.match(/(-?\d+)|([+-])|(\d{4})/g);

    T = parseInt(dobj[0], 10);
    tz = dobj[1];
    off = dobj[2];

    if (off) {
        off = (parseInt(off.substring(0, 2), 10) * 3600000) + (parseInt(off.substring(2), 10) * 60000);
        if(tz == '-') off *= -1;
    }
    else off= 0;
    return new Date(T += off).toUTCString();
}

测试最新的变化:

console.log(timeconvert("Date(-124054000000+0300)"));
console.log(timeconvert('Date(1361145600000)+0000'));
console.log(timeconvert("Date(0+0300)"));
console.log(timeconvert("Date(-2+0200)"));
console.log(timeconvert("Date(-860000000000+1100)"));

/* Output */

"Wed, 26 Jan 1966 07:33:20 GMT"
"Mon, 18 Feb 2013 00:00:00 GMT"
"Thu, 01 Jan 1970 03:00:00 GMT"
"Thu, 01 Jan 1970 01:59:59 GMT"
"Thu, 01 Oct 1942 18:06:40 GMT"
于 2015-05-29T12:07:05.377 回答
2

您可以使用以下代码创建 javascript 日期:

var d = new Date("1/1/2012")

因此,只需将您的 .Net 日期提供为以下格式即可:

new DateTime().ToString("M/d/yyyy")
于 2013-02-13T17:48:57.157 回答
1

我找到了另一种方法,稍微改编自肯尼贝克的回答:

function timeConvert(date){
    var miliseconds = date.replace(/(^.*\()|([+-].*$)/g, '');
    miliseconds = parseInt(miliseconds);
    return new Date(miliseconds);
}

var x = timeConvert("/Date(1361145600000+0000)/");
console.log(x);
于 2013-02-14T09:34:36.773 回答