Tanggal salah ditampilkan dengan Esri JavaScript API v.2.6

8

Saya sedang mengerjakan situs yang menggunakan Esri Javascript API versi 2.6. Saya memiliki jendela info yang menampilkan beberapa informasi tanggal, dan tanggal tersebut satu hari di belakang tanggal dalam database. Sebagai contoh:

Jika saya mengidentifikasi fitur di ArcMap, tanggal yang dikembalikan adalah 8/15/2007. Ketika saya meminta fitur yang sama melalui Rest endpoint saya mendapatkan 2007/08/15 00:00:00 UTC. Ketika saya mengidentifikasi fitur dalam aplikasi web, tanggal yang dikembalikan adalah 8/14/2007.

Dalam kode javascript saya memformat tanggal sebagai berikut:

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

Apa yang menyebabkan ini, dan apa yang dapat saya lakukan untuk mengembalikan tanggal yang benar?

Timothy Michael
sumber
<format dateformat = "shortDate" useutc = "true" />
Brad Nesom
Saya memiliki masalah yang sama dengan flex. Di atas memberi saya data yang benar.
Brad Nesom
1
@BradNesom flex! = JavaScript
Derek Swingley
@BradNesom Saya melihat posting forum dengan itu kemarin, tetapi opsi format waktu berbeda dalam javascript.
Timothy Michael

Jawaban:

7

Tentukan lokal: true di fungsi format tanggal Anda:

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

Jawaban Mintx menjelaskan mengapa Anda perlu melakukan ini. Informasi lebih lanjut tentang memformat jendela info / konten sembulan tersedia dalam bantuan: Memformat konten jendela info .

Sunting: Gunakan DateString, bukan DateFormat untuk menentukan opsi lokal:

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

Sunting 2: Berkat mod, inilah jawaban yang semula memposting Mintx saya yang saya rujuk di atas:

Anda sudah benar sebagian besar, Anda hanya perlu mengubah kode untuk mencerminkan zona waktu yang benar. Karena fitur yang Anda baca dari timestamp UTC, kode JavaScript dikonversi ke zona waktu Anda, yang (dengan asumsi Anda berada di AS) akan 4 hingga 7 jam lebih awal dari tengah malam 8/15/2007, yang merupakan mengapa itu kembali sehari sebelumnya.

Sunting 3: Saya menggunakan cara hacky yang cepat untuk melakukan ini dengan fungsi pemformatan khusus: jsfiddle.net/yEkjm Mungkin ada cara yang lebih baik untuk melakukan ini ... Saya bukan ahli dalam menangani tanggal dengan JS.

Derek Swingley
sumber
Terima kasih Derek. Saya menempatkan lokal: benar dalam fungsi format dan saya masih mendapatkan tanggal satu hari di belakang. Saya memverifikasi bahwa saya memiliki dojo.require ("dojo.date.locale") - apakah ada hal lain yang saya butuhkan? Saya memverifikasi bahwa pengaturan / kode tidak di-cache.
Timothy Michael
1
Itu kesalahan saya, saya menggunakan DateFormat dalam jawaban saya dan itu seharusnya DateString. Saya telah mengedit jawaban saya untuk menunjukkan sintaks yang benar.
Derek Swingley
Saya mencoba menggunakan DateString sebelumnya hari ini, tetapi saya memerlukan tanggal dalam format mm / hh / tttt, dan DateString mengembalikan tanggal sebagai "Sel 14 Agustus 2007."
Timothy Michael
@Tim jika Anda ingin kontrol berbutir halus atas format tanggal, kami kembali ke DateFormat. Dalam pengujian saya, fitur yang diambil dari layanan yang menyimpan tanggal sebagai UTC secara otomatis dikonversi ke zona waktu klien ketika ditampilkan.
Derek Swingley
Terima kasih Derek. Anda benar, mereka sedang dikonversi ke zona waktu saya - itu sebabnya mereka satu hari sebelumnya. Apakah ada cara untuk memaksa tanggal dikembalikan sebagai UTC, karena tanggal tersebut adalah yang benar?
Timothy Michael