Stackoverflowの別の答えから、JavaScriptの日付から.net DateTimeへの変換があります:
long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000);
しかし、逆の方法は? DateTimeからJavascript日付?
試してください:
return DateTime.Now.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds
編集: true UTCの方が優れていますが、一貫性が必要です
return DateTime.UtcNow
.Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc))
.TotalMilliseconds;
ただし、考え直しては、両方の日付が同じタイムゾーンにある限り、問題ではありません。
JavaScript Dateコンストラクターは、Unixエポック(1970年1月1日00:00:00 UTC)以降のミリ秒数を受け入れます。 .Net DateTimeオブジェクトをJavaScript日付に変換するC#拡張メソッドは次のとおりです。
public static class DateTimeJavaScript
{
private static readonly long DatetimeMinTimeTicks =
(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks;
public static long ToJavaScriptMilliseconds(this DateTime dt)
{
return (long)((dt.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 10000);
}
}
JavaScriptの使用:
var dt = new Date(<%= DateTime.Today.ToJavaScriptMilliseconds() %>);
alert(dt);
Moment.js を使用すると、単に次を使用します。
_var jsDate = moment(netDateTime).toDate();
_
netDateTime
はシリアル化されたDateTime変数で、"/Date(1456956000000+0200)/"
のようなものです。
アクションでこれを試すことができます:
return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
そして、これはあなたのAjaxの成功において:
success: function (resultDateString) {
var date = new Date(resultDateString);
}
または、これはあなたのビューで:(JavascriptとC#)
var date = new Date('@DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")');
これでうまくいくはずです:
date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds
私はこれが少し遅れていることを知っていますが、タイムゾーンに依存したくないときに日付を処理するために私が考えなければならなかった解決策があります。基本的に、すべてをUTCに変換する必要があります。
Javascriptからサーバーへ:
タイムゾーンオフセットが削除されたエポック値として日付を送信します。
var d = new Date(2015,0,1) // Jan 1, 2015
// Ajax Request to server ...
$.ajax({
url: '/target',
params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) }
});
サーバーは、エポックの日付として1420070400000を受け取ります。
サーバー側で、そのエポック値を日時オブジェクトに変換します。
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Epoch);
この時点で、日付はユーザーが提供した日付/時刻です。事実上、UTCです。
逆方向:
サーバーがデータベースからデータを(おそらくUTCで)プルするとき、エポックとして違いを取得します(両方の日付オブジェクトがローカルまたはUTCであることを確認してください)。
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
または
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
Javascriptがこの値を受け取ったら、新しい日付オブジェクトを作成します。ただし、この日付オブジェクトは現地時間と見なされるため、現在のタイムゾーンでオフセットする必要があります。
var epochValue = 1420070400000 // value pulled from server.
var utcDateVal = new Date(epochValue);
var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000))
console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time)
console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)
私の知る限り、これはタイムゾーンに依存しない日付を表示する必要があるすべてのタイムゾーンで機能するはずです。
この方法は私のために働いています:
public sCdateToJsDate(cSDate: any): Date {
// cSDate is '2017-01-24T14:14:55.807'
var datestr = cSDate.toString();
var dateAr = datestr.split('-');
var year = parseInt(dateAr[0]);
var month = parseInt(dateAr[1])-1;
var day = parseInt(dateAr[2].substring(0, dateAr[2].indexOf("T")));
var timestring = dateAr[2].substring(dateAr[2].indexOf("T") + 1);
var timeAr = timestring.split(":");
var hour = parseInt(timeAr[0]);
var min = parseInt(timeAr[1]);
var sek = parseInt(timeAr[2]);
var date = new Date(year, month, day, hour, min, sek, 0);
return date;
}
かみそりでMVCを使用する場合
-----カミソリ/ C#
var dt1 = DateTime.Now.AddDays(14).Date;
var dt2 = DateTime.Now.AddDays(18).Date;
var lstDateTime = new List<DateTime>();
lstDateTime.Add(dt1);
lstDateTime.Add(dt2);
--- Javascript
$(function() {
var arr = []; //javascript array
@foreach (var item in lstDateTime)
{
@:arr1.Push(new Date(@item.Year, @(item.Month - 1), @item.Day));
}
幸運を
<input type="hidden" id="CDate" value="<%=DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")%>" />
日付をJS日付(すべての数字)に変換するには:
var JSDate = $("#CDate").val();
JSDate = Date.parse(JSDate);
別の遅い答えですが、これはここにありません。直列化された/Date(1425408717000)/
の変換をjavascriptで処理したい場合は、単に呼び出すことができます:
var cSharpDate = "/Date(1425408717000)/"
var jsDate = new Date(parseInt(cSharpDate.replace(/[^0-9 +]/g, '')));
ソース: amirsahib