2013-07-17 40 views
7

Chúng tôi đang quan sát vấn đề sau liên quan đến chênh lệch thời gian giữa ứng dụng MVC của chúng tôi và ngày Kendo DatePicker. Máy chủ web đang chạy trong UTC + 0. Các máy khách web đang chạy trong các múi giờ khác nhau (UTC + 1, UTC + 3, UTC-5, v.v.)Kendo MVC Bản dịch múi giờ Datepicker

Trang web chứa bộ chọn ngày Kendo (không có phần thời gian) mà người dùng chọn một ngày hoặc một tháng. Đằng sau hậu trường Ngày được gửi trong một yêu cầu AJAX sử dụng các đối tượng Ngày đầy đủ chứa thông tin về thời gian và múi giờ.

Chúng tôi chỉ quan tâm đến phần ngày bất kể múi giờ mà khách hàng đang ở. Khi người dùng chọn ngày/tháng, chúng tôi muốn nhận đối tượng C# DateTime trong thời gian máy chủ cục bộ.

Ví dụ:

User is tại UTC + 1 và chọn '01/07/2013' Các đối tượng C# DateTime thực tế được khởi tạo như '30/06/2013 23:00' Chúng tôi mong muốn nhận được '01/07/2013 00:00:00'

Chúng tôi hiện đang sử dụng các thiết lập sau đây trong Global.asax:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandliig = Newtonsoft.Json.DateTimeZoneHandling.Local; 

Ông có thể xin tư vấn?

Trả lời

0

Sự cố là chuyển đổi được tất cả được borked lên giữa Ngày JavaScript và C# DateTime. Những gì tôi làm là chuyển đổi ngày thành chuỗi trước khi nó được đăng lên máy chủ. Bạn có thể móc vào hàm parameterMap của Kendo DataSource để thực hiện việc này.

Sử dụng parameterMap chức năng:

var ds = new kendo.data.DataSource({ 
    transport: { 
    parameterMap: function(data, type) { 
     if (type === 'create' || type === 'update') { 
     // this changes the date to 'dd/MM/YYYY' format 
     data.date = kendo.toString(data.date, 'd'); 
     } 
     return data; 
    } 
    } 
}); 

Tôi cũng thiết lập các JsonFormatter.SerializerSettings.DateFormatString = "YYYY/dd/MM hh:mm:ss" vì JavaScript có thể chuyển đổi này vào một đối tượng Date mà không có lỗi hoặc wonkiness khác. Tôi cũng khuyên bạn nên thay đổi DateTimeZoneHandling thành UTC của mình. Bạn không cần bù đắp múi giờ, phải không?

Ở phía máy chủ trong bộ điều khiển, bạn có thể sử dụng DateTime.Parse() hoặc để trình biên dịch thực hiện chuyển đổi ngầm.