Jak przekonwertować obiekt daty JavaScript na znaczniki? Chcę użyć znaczników, aby uzyskać dokładną datę dla mojej aplikacji C # po synchronizacji danych.
c#
javascript
Talha
źródło
źródło
utcnow
tiki serwera (w stosunku do roku 1970) do strony i przechowując różnicę między tą wartością a+new Date()
początkiem strony. Wtedy cała data / godzina może zostać przesunięta o tę kwotę. Każdy błąd sprowadza się wtedy tylko do opóźnienia strony.Odpowiedzi:
Jeśli chcesz przekonwertować swój
DateTime
obiekt na uniwersalne tiki, użyj następującego fragmentu kodu:var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);
źródło
Typ JavaScript
Date
pochodzi z epoki Uniksa: północ 1 stycznia 1970 roku.Typ .NET
DateTime
pochodzi o północy 1 stycznia 0001.Możesz przetłumaczyć
Date
obiekt JavaScript na znaczniki .NET w następujący sposób: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);
źródło
(621355968e9 + (new Date()).getTime() * 1e4)
skraca te 4 linie w dół, kiedy już zrozumiesz. Świetna akcja @LukeHJeśli przez „tiki” masz na myśli coś w rodzaju „milisekund od epoki”, możesz wywołać „.getTime ()”.
var ticks = someDate.getTime();
Z dokumentacji MDN zwracana wartość to
źródło
Rozszerzanie zaakceptowanej odpowiedzi jako przyczyny
635646076777520000
.Javascript
new Date().getTime() or Date.now()
zwróci liczbę milisekund, które upłynęły odmidnight of January 1, 1970
.W .NET ( źródło w
Remarks
sekcjach)621355968000000000
jest wartością kleszczy odmidnight Jan 1 01 CE
domidnight Jan 1 1970
Tak więc w .NET
Console.Write(new DateTime(621355968000000000)) // output 1/1/1970 12:00:00 AM
Stąd przekonwertować czas javascript na ticky .Net
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;
Teraz w .NET
Console.Write(new DateTime(netTicks)) // output current time
źródło
Data w JavaScript zawiera również przesunięcie. Jeśli chcesz się go pozbyć, użyj następujących:
return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);
Używam rozwiązania Skeikha i odejmuję znaczniki dla „przesunięcia”.
źródło
Tak powinno być
date.GetTime()
. Należy pamiętać, że C # i JavaScript używają różnych dat początkowych, więc użyj czegoś takiego, aby przekonwertować C # DateTime.public static DateTime GetDateTime(long jsSeconds) { DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0); return unixEpoch.AddSeconds(jsSeconds); }
źródło