Ngày không chính xác được hiển thị với Esri JavaScript API v.2.6


8

Tôi đang làm việc trên một trang web đang sử dụng phiên bản 2.6 của API Esri. Tôi có một cửa sổ thông tin hiển thị một số thông tin ngày và ngày chậm hơn một ngày so với ngày trong cơ sở dữ liệu. Ví dụ:

Nếu tôi xác định một tính năng trong ArcMap, ngày trả về là 15/8/2007. Khi tôi truy vấn tính năng tương tự thông qua điểm cuối Rest, tôi nhận được 2007/08/15 00:00:00 UTC. Khi tôi xác định tính năng trong ứng dụng web, ngày trả về là ngày 14 tháng 8 năm 2007.

Trong mã javascript tôi định dạng ngày như sau:

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

Điều gì gây ra điều này và tôi có thể làm gì để trả lại đúng ngày?


<format dateformat = "shortDate" useutc = "true" />
Brad Nesom

Tôi đã có cùng một vấn đề với flex. Ở trên đã cho tôi dữ liệu chính xác.
Brad Nesom

1
@BradNesom flex! = JavaScript
Derek Swingley

@BradNesom Tôi đã thấy một bài đăng trên diễn đàn ngày hôm qua, nhưng các tùy chọn định dạng thời gian khác nhau trong javascript.
Timothy Michael

Câu trả lời:


7

Chỉ định cục bộ: true trong chức năng định dạng ngày của bạn:

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

Câu trả lời của Mintx giải thích lý do tại sao bạn cần phải làm điều này. Thông tin thêm về định dạng cửa sổ thông tin / nội dung bật lên có sẵn trong trợ giúp: Định dạng nội dung cửa sổ thông tin .

Chỉnh sửa: Sử dụng DateString, không phải DateFormat để chỉ định tùy chọn cục bộ:

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

Chỉnh sửa 2: Nhờ các mod, đây là câu trả lời ban đầu được đăng Mintx của tôi mà tôi đã giới thiệu ở trên:

Bạn đã hiểu đúng, bạn chỉ cần thay đổi mã để phản ánh đúng múi giờ. Vì tính năng bạn đang đọc là dấu thời gian UTC, mã JavaScript đang chuyển đổi thành múi giờ của bạn, mà (giả sử bạn ở Mỹ) sẽ sớm hơn 4 đến 7 giờ so với nửa đêm ngày 15 tháng 8 năm 2007, tức là tại sao nó trở lại sớm hơn một ngày.

Chỉnh sửa 3: Tôi đã tạo ra một cách nhanh chóng, khéo léo để làm điều này với chức năng định dạng tùy chỉnh: jsfiddle.net/yEkjm Có lẽ có một cách tốt hơn để làm điều này ... Tôi không phải là chuyên gia về xử lý ngày với JS.


Cảm ơn Derek. Tôi đặt local: true trong chức năng định dạng và vẫn đang hẹn hò một ngày sau. Tôi đã xác minh rằng tôi có dojo.require ("dojo.date.locale") - tôi còn cần gì nữa không? Tôi đã xác minh rằng cài đặt / mã không được lưu trữ.
Timothy Michael

1
Đó là lỗi của tôi, tôi đã sử dụng DateFormat trong câu trả lời của mình và đó phải là DateString. Tôi đã chỉnh sửa câu trả lời của mình để hiển thị cú pháp đúng.
Derek Swingley

Tôi đã thử sử dụng DateString sớm hôm nay, nhưng tôi cần ngày ở định dạng mm / dd / yyyy và DateString trả về ngày là "Thứ ba ngày 14 tháng 8 năm 2007".
Timothy Michael

@Tim nếu bạn muốn kiểm soát chi tiết về định dạng ngày, chúng tôi sẽ quay lại DateFormat. Trong thử nghiệm của tôi, các tính năng được truy xuất từ ​​dịch vụ lưu trữ ngày dưới dạng UTC sẽ tự động được chuyển đổi sang múi giờ của khách hàng khi được hiển thị.
Derek Swingley

Cảm ơn Derek. Bạn nói đúng, họ đang được chuyển đổi theo múi giờ của tôi - đó là lý do tại sao họ sớm hơn một ngày. Có cách nào để buộc ngày được trả lại là UTC không, vì ngày đó là ngày chính xác?
Timothy Michael
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.