Возможный дубликат:
Как отформатировать дату JSON?
Мой веб-сервис возвращает DateTime для вызова jQuery. Служба возвращает данные в этом формате:
/Date(1245398693390)/
Как я могу преобразовать это в дату, удобную для JavaScript?
Возможный дубликат:
Как отформатировать дату JSON?
Мой веб-сервис возвращает DateTime для вызова jQuery. Служба возвращает данные в этом формате:
/Date(1245398693390)/
Как я могу преобразовать это в дату, удобную для JavaScript?
Возвращается миллисекунды с эпохи. Вы можете сделать:
var d = new Date();
d.setTime(1245398693390);
document.write(d);
О том, как форматировать дату точно так, как вы хотите, см. полную ссылку Date
в http://www.w3schools.com/jsref/jsref_obj_date.asp
Вы можете разделить цифры, разделив целое число (как предложено здесь):
var date = new Date(parseInt(jsonDate.substr(6)));
Или применяя следующее регулярное выражение (от Tominator в комментариях):
var jsonDate = jqueryCall(); // returns "/Date(1245398693390)/";
var re = /-?\d+/;
var m = re.exec(jsonDate);
var d = new Date(parseInt(m[0]));
Я использовал этот метод некоторое время:
using System;
public static class ExtensionMethods {
// returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
public static double UnixTicks(this DateTime dt)
{
DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return ts.TotalMilliseconds;
}
}
Предполагая, что вы развиваетесь против .NET 3.5, это прямая копия/вставка. В противном случае вы можете его переносить.
Вы можете инкапсулировать это в объект JSON или просто записать его в поток ответов.
На стороне Javascript/JSON вы конвертируете это в дату, просто передавая тики в новый объект Date:
jQuery.ajax({
...
success: function(msg) {
var d = new Date(msg);
}
}
Чтобы проанализировать строку даты с помощью String.replace с обратной ссылкой:
var milli = "/Date(1245398693390)/".replace(/\/Date\((-?\d+)\)\//, '$1');
var d = new Date(parseInt(milli));
Если вы передадите DateTime
из кода .Net в код javascript,
С#:
DateTime net_datetime = DateTime.Now;
javascript рассматривает его как строку, например "/Date(1245398693390)/"
:
Вы можете преобразовать его как fllowing:
// convert the string to date correctly
var d = eval(net_datetime.slice(1, -1))
или
// convert the string to date correctly
var d = eval("/Date(1245398693390)/".slice(1, -1))
Если у вас возникли проблемы с получением информации о времени, вы можете попробовать что-то вроде этого:
d.date = d.date.replace('/Date(', '');
d.date = d.date.replace(')/', '');
var expDate = new Date(parseInt(d.date));
преобразование из 1970,1,1 требует двойного округления до нуля десятичных знаков, я думаю,
DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return Math.Round( ts.TotalMilliseconds,0);
на стороне клиента я использую
new Date(+data.replace(/\D/g, ''));
http://stevenlevithan.com/assets/misc/date.format.js
var date = eval(data.Data.Entity.Slrq.replace(/\/Date\((\d )\)\//gi, "new Date($1)"));
alert(date.format("yyyy-MM-dd HH:mm:ss"));
alert(dateFormat(date, "yyyy-MM-dd HH:mm:ss"));
Вы можете попробовать стороннюю библиотеку, например json.net Там есть документация на сайте проекта. Он говорит, что это требует .net 3.5.
В противном случае есть еще один, называемый Nii.json, который, я считаю, является портом из java. Я нашел ссылку на него этот блог
В предыдущих ответах все утверждают, что вы можете сделать следующее:
var d = eval(net_datetime.slice(1, -1));
Однако это не работает ни в Chrome, ни в FF, потому что буквально получается:
// returns the current timestamp instead of the specified epoch timestamp
var d = Date([epoch timestamp]);
Правильный способ сделать это:
var d = eval("new " + net_datetime.slice(1, -1)); // which parses to
var d = new Date([epoch timestamp]);
Думаю, я бы добавил свое решение, которое я использовал.
Если вы используете System.Web.Script.Serialization.JavaScriptSerializer()
, тогда возвращаемое время не будет соответствовать вашему часовому поясу. Чтобы исправить это, вы также захотите использовать dte.getTimezoneOffset()
, чтобы вернуть его в нужное время.
String.prototype.toDateFromAspNet = function() {
var dte = eval("new " + this.replace(/\//g, '') + ";");
dte.setMinutes(dte.getMinutes() - dte.getTimezoneOffset());
return dte;
}
теперь вы просто вызываете
"/Date(1245398693390)/".toDateFromAspNet();
Пт Июн 19 2009 00:04:53 GMT-0400 (Восточное летнее время) {}