Wie soll ich ein JavaScript-Datumsobjekt in Ticks konvertieren? Ich möchte die Häkchen verwenden, um das genaue Datum für meine C # -Anwendung nach der Synchronisierung der Daten zu erhalten.
Antworten:
Wenn Sie Ihr DateTimeObjekt in universelle Ticks konvertieren möchten, verwenden Sie den folgenden Codeausschnitt:
var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);
Es gibt 10000 Zecken in einer Millisekunde. Und 621.355.968.000.000.000 Ticks zwischen 1 st Jan 0001 und 1 st Januar 1970.
Der DateUrsprung des JavaScript- Typs ist die Unix-Epoche: Mitternacht am 1. Januar 1970.
Der DateTimeUrsprung des .NET- Typs liegt am 1. Januar 0001 um Mitternacht.
Sie können ein JavaScript- DateObjekt wie folgt in .NET-Ticks übersetzen :
var yourDate = new Date(); // for example
// the number of .net ticks at the unix epoch
var epochTicks = 621355968000000000;
// there are 10000 .net ticks per millisecond
var ticksPerMillisecond = 10000;
// calculate the total number of .net ticks for your date
var yourTicks = epochTicks + (yourDate.getTime() * ticksPerMillisecond);
(621355968e9 + (new Date()).getTime() * 1e4)Verdichtet diese 4 Zeilen, sobald Sie das Verständnis haben. Großer Anteil @LukeH
Wenn Sie mit "Häkchen" so etwas wie "Millisekunden seit der Epoche" meinen, können Sie ".getTime ()" aufrufen.
var ticks = someDate.getTime();
In der MDN-Dokumentation ist der zurückgegebene Wert ein
Ganzzahliger Wert, der die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 UTC (Unix-Epoche) darstellt.
Erweitern der akzeptierten Antwort als Warum 635646076777520000wird hinzugefügt.
Javascript new Date().getTime() or Date.now()gibt die Anzahl der Millisekunden zurück, die von vergangen sind midnight of January 1, 1970.
In .NET ( Quelle unter RemarksAbschnitten)
Der Werttyp DateTime repräsentiert Datums- und Uhrzeitangaben mit Werten zwischen 00:00:00 (Mitternacht), 1. Januar 0001, Anno Domini (Common Era) und 23:59:59, 31. Dezember 9999 (CE) im Gregorianischen Kalender.
621355968000000000ist der Wert von Zecken von midnight Jan 1 01 CEbismidnight Jan 1 1970
Also in .NET
Console.Write(new DateTime(621355968000000000))
// output 1/1/1970 12:00:00 AM
Daher, um Javascript-Zeit in .Net-Ticks umzuwandeln
var currentTime = new Date().getTime();
// 10,000 ticks in 1 millisecond
// jsTicks is number of ticks from midnight Jan 1, 1970
var jsTicks = currentTime * 10000;
// add 621355968000000000 to jsTicks
// netTicks is number of ticks from midnight Jan 1, 01 CE
var netTicks = jsTicks + 621355968000000000;
Jetzt in .NET
Console.Write(new DateTime(netTicks))
// output current time
Datum in JavaScript enthält auch Offset. Wenn Sie es loswerden müssen, verwenden Sie Folgendes:
return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);
Ich verwende Skeikhs Lösung und subtrahiere Ticks für 'Offset'.
Das sollte sein date.GetTime(). Beachten Sie, dass C # und Javascript unterschiedliche Anfangsdaten verwenden. Verwenden Sie daher Folgendes, um in C # DateTime zu konvertieren.
public static DateTime GetDateTime(long jsSeconds)
{
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return unixEpoch.AddSeconds(jsSeconds);
}
utcnowin Ticks (relativ zu 1970) in die Seite einfüge und die Differenz zwischen diesem Wert und+new Date()beim Seitenstart speichere . Dann können alle Daten / Zeiten um diesen Betrag verrechnet werden. Jeder Fehler ist dann nur auf die Seitenlatenz zurückzuführen.