可能性のある複製:
JSON日付のフォーマット方法
私のWebサービスは、DateTimeをjQuery呼び出しに返しています。サービスは、次の形式でデータを返します。
/Date(1245398693390)/
これをJavaScriptに適した日付に変換するにはどうすればよいですか?
返されるのは、エポック以降のミリ秒です。できること:
var d = new Date();
d.setTime(1245398693390);
document.write(d);
日付を希望どおりにフォーマットする方法については、 http://www.w3schools.com/jsref/jsref_obj_date.asp で完全なDate
リファレンスを参照してください。
整数を解析することで非数字を取り除くことができます( ここで提案されているように ):
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コードに渡す場合、C#:
DateTime net_datetime = DateTime.Now;
javascriptは"/Date(1245398693390)/"
のように文字列として扱います:
以下のように変換できます:
// 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"));
前の回答では、次のことができるすべての状態に回答しています。
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();
2009年6月19日金曜日00:04:53 GMT-0400(東部夏時間){}