2016-07-20 3 views
1

Ich habe einige Javascript, die nur ausgeführt werden müssen, wenn es weniger als so viele Sekunden seit einem Datum, das auf dem Server berechnet wurde, aber ich habe Probleme mit dem Datumsvergleich Hier ist, was ich versucht habe:So vergleichen Sie eine C# DateTime mit Javascript Date.now()

<script type="text/javascript"> 
    var elapsedMillis = 10000; 
    if(Date.now() - <%=(benchmarkDate-new DateTime(1970,1,1)).TotalMilliseconds%> < elapsedMillis) 
    { 
     //do stuff 
    } 
</script> 

Leider ist die C# Timespan gibt mir eine Anzahl von Millisekunden, die von etwa 14.000 Sekunden von JavaScripts Date.now() ändert sich selbst dann ausgeführt, wenn innerhalb von 10 Sekunden von benchmarkDate einstellen.

+2

ich eine Berechnung von Nick Gotch gefunden [diese] (http://stackoverflow.com/questions/17950075/ convert-c-sharp-Datum-zu-Javascript-Datum) SO Frage. Ist das eine Lösung für dich? –

+0

@JeroenHeier Ich denke schon, im Grunde genommen. Aber ich mag es nicht, Zahlen ohne Erklärung zu verwenden, also werde ich eine Workaround veröffentlichen, die ich etwas transparenter fand. Danke für den Tipp! :) – blackorchid

+1

Ich denke [http://stackoverflow.com/questions/7966559/how-to-convert-javascript-date-object-to-ticks] Frage und [diese] (http://stackoverflow.com/questions/2404247/datetime-to-javascript-date) Frage haben bessere Erklärungen. – Jasen

Antwort

3

Es stellte sich heraus, dass es sich um ein Zeitzonenproblem handelte, da ich nicht wusste, dass JavaScript Date.now() ein UTC-Datum zurückgab. Hier ist meine fix das C# Datum UTC zuerst zu konvertieren, nur für den Fall hilft es jemand anderes:

<script type="text/javascript"> 
    var elapsedMillis = 10000; 
    if(Date.now() - <%=(benchmarkDate.ToUniversalTime()-new DateTime(1970,1,1)).TotalMilliseconds%> < elapsedMillis) 
    { 
     //do stuff 
    } 
</script>