Mit der Esri JavaScript API v.2.6 wird ein falsches Datum angezeigt

8

Ich arbeite an einer Site, die Version 2.6 der Esri Javascript API verwendet. Ich habe ein Infofenster, in dem einige Datumsinformationen angezeigt werden, und das Datum liegt einen Tag hinter dem Datum in der Datenbank. Zum Beispiel:

Wenn ich ein Feature in ArcMap identifiziere, ist das zurückgegebene Datum der 15.08.2007. Wenn ich über den Rest-Endpunkt nach derselben Funktion frage, erhalte ich 2007/08/15 00:00:00 UTC. Wenn ich die Funktion in der Webanwendung identifiziere, ist das zurückgegebene Datum der 14.08.2007.

Im Javascript-Code formatiere ich das Datum wie folgt:

${SALEDT:DateFormat(selector: 'date', fullYear: true)}

Was verursacht dies und was kann ich tun, um das richtige Datum zurückzugeben?

Timothy Michael
quelle
<format dateformat = "shortDate" useutc = "true" />
Brad Nesom
Ich hatte das gleiche Problem mit Flex. Das obige gab mir korrekte Daten.
Brad Nesom
1
@BradNesom flex! = JavaScript
Derek Swingley
@BradNesom Ich habe gestern einen Forumsbeitrag damit gesehen, aber die Zeitformatierungsoptionen unterscheiden sich in Javascript.
Timothy Michael

Antworten:

7

Geben Sie in Ihrer Datumsformatierungsfunktion local: true an:

${SALEDT:DateFormat(selector: 'date', local: true, fullYear: true)}

Die Antwort von Mintx erklärt, warum Sie dies tun müssen. Weitere Informationen zum Formatieren von Infofenster- / Popup-Inhalten finden Sie in der Hilfe: Formatieren von Infofensterinhalten .

Bearbeiten: Verwenden Sie DateString und nicht DateFormat, um die lokale Option anzugeben:

${SALEDT:DateString(local: true, hideTime: true)}

Edit 2: Dank der Mods ist hier die Antwort, die ursprünglich meinen Mintx gepostet hat, den ich oben erwähnt habe:

Sie haben es größtenteils richtig gemacht, Sie müssen nur den Code ändern, um die richtige Zeitzone wiederzugeben. Da es sich bei der Funktion, aus der Sie lesen, um einen UTC-Zeitstempel handelt, wird der JavaScript-Code in Ihre Zeitzone konvertiert, die (vorausgesetzt, Sie befinden sich in den USA) 4 bis 7 Stunden vor Mitternacht des 15.08.2007 liegt warum es einen Tag früher zurückkommt.

Bearbeiten 3: Ich habe eine schnelle, hackige Methode zusammengestellt, um dies mit einer benutzerdefinierten Formatierungsfunktion zu tun: jsfiddle.net/yEkjm Es gibt wahrscheinlich eine bessere Möglichkeit, dies zu tun ... Ich bin kein Experte für den Umgang mit Daten mit JS.

Derek Swingley
quelle
Danke Derek. Ich habe local: true in die Formatierungsfunktion eingefügt und erhalte noch einen Tag später Daten. Ich habe überprüft, ob ich dojo.require ("dojo.date.locale") habe. Gibt es noch etwas, das ich brauche? Ich habe überprüft, dass die Einstellung / der Code nicht zwischengespeichert wird.
Timothy Michael
1
Das ist mein Fehler, ich habe DateFormat in meiner Antwort verwendet und es sollte DateString sein. Ich habe meine Antwort bearbeitet, um die richtige Syntax anzuzeigen.
Derek Swingley
Ich habe heute früher versucht, DateString zu verwenden, aber ich benötige das Datum im Format MM / TT / JJJJ, und DateString gibt das Datum als "Di 14. August 2007" zurück.
Timothy Michael
@Tim Wenn Sie eine präzise Kontrolle über das Datumsformat wünschen, kehren wir zu DateFormat zurück. In meinen Tests werden Funktionen, die von einem Dienst abgerufen wurden, der Daten als UTC speichert, bei der Anzeige automatisch in die Zeitzone des Clients konvertiert.
Derek Swingley
Danke Derek. Sie haben Recht, sie werden in meine Zeitzone konvertiert - deshalb sind sie einen Tag früher. Gibt es eine Möglichkeit, die Rückgabe der Daten als UTC zu erzwingen, da dieses Datum das richtige ist?
Timothy Michael