我有一个WCF服务,为我的JavaScript服务一些日期。我要操作的日期,但它到达的JavaScript看起来像这样:.NET日期时间转换为Javascript日期
/Date(1361145600000+0000)/
我知道这是因为1970/01/01的毫秒,但我还没有能够弄清楚如何将其转换为一个JavaScript日期。
我需要使用正则表达式或修剪文本提取毫秒,然后用它是这样的:
new Date(miliseconds)
当然必须有一个更简单的方法?
我有一个WCF服务,为我的JavaScript服务一些日期。我要操作的日期,但它到达的JavaScript看起来像这样:.NET日期时间转换为Javascript日期
/Date(1361145600000+0000)/
我知道这是因为1970/01/01的毫秒,但我还没有能够弄清楚如何将其转换为一个JavaScript日期。
我需要使用正则表达式或修剪文本提取毫秒,然后用它是这样的:
new Date(miliseconds)
当然必须有一个更简单的方法?
如果“+ 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
请在此主题下面找到固定代码(有解释和测试)https://stackoverflow.com/a/30529222/4953065 – 2017-07-17 10:06:07
您可以使用代码创建的JavaScript的日期,如:
var d = new Date("1/1/2012")
所以它应该是简单地提供你的.NET日期的格式问题:
new DateTime().ToString("M/d/yyyy")
是的,这将工作,但这意味着将字符串日期添加到我的模型的另一个属性,这似乎并不必要。我宁愿让JavaScript转换日期,我的服务不应该转换它。 – Owen 2013-02-14 16:28:19
我只回答与日期可移植性相关的部分问题,因为我最近不得不在php中处理它。干杯。 – 2013-02-18 18:20:56
我发现了另一种方法,稍做改动从肯纳贝克的回答是:通过肯纳贝克提出
function timeConvert(date){
var miliseconds = date.replace(/(^.*\()|([+-].*$)/g, '');
miliseconds = parseInt(miliseconds);
return new Date(miliseconds);
}
var x = timeConvert("/Date(1361145600000+0000)/");
console.log(x);
代码有一个日期的错误,即低于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"
如果你打算忽略一个问题,请稍微有用,留下评论,以便人们可以在将来改进问题 – Owen 2016-02-22 17:25:50