2013-02-13 130 views
2

我有一个WCF服务,为我的JavaScript服务一些日期。我要操作的日期,但它到达的JavaScript看起来像这样:.NET日期时间转换为Javascript日期

/Date(1361145600000+0000)/ 

我知道这是因为1970/01/01的毫秒,但我还没有能够弄清楚如何将其转换为一个JavaScript日期。

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

new Date(miliseconds) 

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

+0

如果你打算忽略一个问题,请稍微有用,留下评论,以便人们可以在将来改进问题 – Owen 2016-02-22 17:25:50

回答

5

如果“+ 0000'是一个标准的时区偏移量,前两位数字是小时,最后两位,分钟。

想必它并不总是“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 GMT

如果日期ARE总是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 
+0

请在此主题下面找到固定代码(有解释和测试)https://stackoverflow.com/a/30529222/4953065 – 2017-07-17 10:06:07

3

您可以使用代码创建的JavaScript的日期,如:

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

所以它应该是简单地提供你的.NET日期的格式问题:

new DateTime().ToString("M/d/yyyy") 
+0

是的,这将工作,但这意味着将字符串日期添加到我的模型的另一个属性,这似乎并不必要。我宁愿让JavaScript转换日期,我的服务不应该转换它。 – Owen 2013-02-14 16:28:19

+0

我只回答与日期可移植性相关的部分问题,因为我最近不得不在php中处理它。干杯。 – 2013-02-18 18:20:56

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); 
2

代码有一个日期的错误,即低于1 1970年1月 例如,日期(-124054000000 + 0300)是星期三1966年1月26日七时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" 
相关问题