4

javascriptにいくつかの日付を提供するWCFサービスがあります。日付を操作したいのですが、JavaScriptで次のように表示されます。

/Date(1361145600000+0000)/

これが1970/01/01からのミリ秒であることは知っていますが、JavaScriptの日付に変換する方法を理解できていません。

正規表現を使用するか、テキストをトリミングしてミリ秒を抽出してから、次のように使用する必要がありますか?

new Date(miliseconds)

確かにもっと簡単な方法があるに違いありませんか?

4

4 に答える 4

5

'+0000'が標準のタイムゾーンオフセットである場合、最初の2桁は時間、最後の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:00GMT

日付が常に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によって提案されたコードには、1970年1月1日より前の日付のバグがあります。たとえば、Date(-124054000000 + 0300)は1966年1月26日水曜日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 に答える