json-und Utc-datetime -
Ich bin die Speicherung Utc-datetime-auf dem server und abrufen von Daten über json für die Anzeige im client.
Das problem ist, dass der server liefert die Zeit, indem Sie Ihre Zeitzone, die anders ist, als ein client.
Wie könnte ich den local-dateTime-Anzeige auf den client-ohne hardcoding der offset?
Ich bin mit asp.net mvc und stroring Datum und Zeit in SQL Server 2008-Datenbank als 'datetime'. DateTime-format in der Datenbank ist 2013-03-29 08:00:00.000.
Was server-side-Sprache verwenden Sie? PHP/ASP.NET/etwas anderes?
haben Sie versucht, indem 'UTC', um den string wie bereits erwähnt hier: stackoverflow.com/questions/6525538/...
Ich bin mit asp.net mvc.
String stammt wieder vom server als "Use_DateTime":"\/Date(1364482800000-0700)\/", und dies ist bereits der Server datetime. So wie ich das verstehe hinzufügen 'utc' es würde nicht helfen.
haben Sie versucht, indem 'UTC', um den string wie bereits erwähnt hier: stackoverflow.com/questions/6525538/...
Ich bin mit asp.net mvc.
String stammt wieder vom server als "Use_DateTime":"\/Date(1364482800000-0700)\/", und dies ist bereits der Server datetime. So wie ich das verstehe hinzufügen 'utc' es würde nicht helfen.
InformationsquelleAutor agri | 2013-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen nicht sagen, wie die UTC-Zeit dargestellt. Es ist üblich, in eine UNIX-Zeit Wert in Sekunden seit 1970-01-01T00:00:00Z. Wenn es das ist, was Sie verwenden, können Sie erstellen Sie ein date-Objekt auf dem client durch Multiplikation mit 1,000 und geben es zu der Date-Konstruktor:
Wenn Sie sagen .NET, der Wert kann schon in Millisekunden, so dass Sie nicht brauchen, um zu multiplizieren durch 1.000. Sie müssen überprüfen Sie mit der Quelle zu sehen, welcher Wert übergeben wird, und welche Epoche wird verwendet, wenn es einem die Zeit Wert.
Javascript-date-Objekte basieren auf einer Zeit Wert, die der gleichen Epoche wie UNIX verwendet wird, sondern Millisekunden. Das standard-Datum-Methoden (getFullYear, getMonth, getDate, etc.) wird die return-Werte in die lokale Zeitzone basierend auf system-Einstellungen. Die UTC-Methoden (getUTCFullYear, getUTCMonth, getUTCDate, etc.) zurück UTC-Werte für die gleiche Zeit.
Also, wenn Sie auf der Durchreise sind, einen Zeitwert, es verwenden, um ein date-Objekt auf dem client und Lesen Sie die Werte unter Verwendung von standard-Methoden und haben Sie lokale Entsprechungen von der UTC-Zeit Wert.
Wenn Sie auf der Durchreise sind, einen datetime-string wie 2013-03-31T14:32:22Z, können Sie konvertieren, um ein date-Objekt mit Datum.UTC konvertieren Sie die Zeichenfolge in einen time-Wert, geben Sie, dass der date-Konstruktor:
Wenn Ihr input-string ist ein anderes format, müssen Sie möglicherweise zum anpassen der split-Muster und Reihenfolge der übergebenen Parameter Datum.UTC.
Bearbeiten
Wenn der format-string ist 2013-03-29 08:00:00.000 (vorausgesetzt, UTC), die Sie verwenden können:
Aber vorsichtig sein, zusätzliche Räume. Könnten Sie kürzen wollen keine führenden oder nachgestellten Leerzeichen und dafür gibt es nur eine Trennung von Datum und Uhrzeit-Komponenten.
Edit 2
Nicht verwenden Datum.analysiert werden können. Bis ES5 es war völlig implementierungsabhängig. Jetzt ist es teilweise standardisierte wenn der Zeichenfolge entspricht, die nach ISO8601–format wie angegeben von ES5. Das ist aber nicht von allen Browsern unterstützt, so jedoch nicht zuverlässig und ist auch sonst noch implementierungsabhängig. Die beste Lösung ist (also eine, die funktioniert überall) ist das manuelle Parsen der Wert, den Sie gegeben sind.
Wenn das format wie: "1364835180000-0700", dann kann man ziemlich leicht umgehen mit, dass mit einer Funktion, subtrahiert den offset zu bekommen UTC-Zeit-Wert, der ergibt, dass der date-Konstruktor. Ich gehe davon aus, dass -0700 bedeutet 7hrs westlich von Greenwich (javascript Zeitzone offsets haben einen entgegengesetzten Sinn, westlich von Greenwich ist +ve).
Edit 3
Sorry, muss falsch gepostet geschnippelt, hetzen, um ein treffen.
Danke für die Hilfe.Ich hab ihn nicht sortiert, aber verstehen es ein bisschen besser. Wenn ich schaute auf mein Datum, das kommt wieder vom server im json-Format, ich kann die timezone Unterschied mit Blick auf die letzten vier Ziffern e.g "\/Date(1364835180000-0700)\/" - 7hrs hinter "\/Date(1364662800000+0000)\/" -utc-Zeit , "\/Date(1364814000000+0100)\/" - vor. Zu wissen, dass ich neu berechnen das Datum durch hinzufügen von 7hrs in Millisekunden, aber das Datum ist nicht ganz dieselbe, var d=new Date(); var date=Datum.parse(d); gibt es eine offensichtliche Möglichkeit der Umwandlung: (1364662800000+0000) 1364856878000.
Ihre Letzte Funktion scheint das gleiche zu sein wie jsonDate = "1364482800000-0700" var d = new Date(parseInt(jsonDate)); oder gibt es Unterschiede? jsfiddle.net/karin/Ugjkr
Dank RobG, das funktioniert perfekt.
InformationsquelleAutor RobG
Return DateTime UTC und wandeln es auf dem client verwenden .toLocaleString():
Modell.Die Zeit ist wirklich nur, was Sie haben Ihre Zeit-variable genannt. Sie können die
ViewBag.Time = <whatevertimevariable>.ToUniversalTime().Ticks/TimeSpan.TicksPerMillisecond
entweder im View oder im Controller. Wahrscheinlich besser, um es in den controller, obwohl.InformationsquelleAutor Rob G