2011-01-14 21 views
11

Tôi có một trang sử dụng lịch jquery để hiển thị các sự kiện. Tôi đã nhận thấy hơn khi sử dụng hệ thống từ bên trong IE (tất cả các phiên bản) ASP.NET MVC sẽ không liên kết ngày giờ với hành động gửi lại các sự kiện chính xác.Đối tượng javascript ngày từ IE không thể tự động liên kết với Ngày giờ trong ASP.NET MVC

Chuỗi sự kiện diễn ra như sau.

  • Lịch bài gửi đến máy chủ để có được sự kiện
  • server ActionMethod chấp nhận bắt đầu và ngày kết thúc, tự động ràng buộc để datetime đối tượng

Trong mỗi trình duyệt khác ngoài IE bắt đầu và ngày kết thúc đi qua như:

Mon, 10 Jan 2011 00:00:00 GMT 

Khi viết IE ngày, nó đi qua như

Mon, 10 Jan 2011 00:00:00 UTC 

ASP.NET MVC 2 sau đó sẽ không tự động liên kết điều này với tham số phương thức hành động.

Có lý do nào khiến điều này xảy ra không? Các mã mà viết đến máy chủ như sau:

data: function (start, end, callback) { 
     $.post('/tracker/GetTrackerEvents', { start: start.toUTCString(), end: end.toUTCString() }, function (result) { callback(result); }); 
    }, 
+0

Một tính năng IE tuyệt vời. Thật vậy địa ngục khó hiểu. Hãy xem http://www.west-wind.com/Weblog/posts/5054.aspx này – Sentient

Trả lời

3

cố gắng để thay thế

start.toUTCString() 

với

start.toUTCString().replace('UTC','GMT') 

và thấy rằng nếu không giải quyết vấn đề cho bạn:)

0

Tôi cũng đã gặp phải tình huống kỳ lạ này. Thay thế UTC thành GMT trong chuỗi ngày đã giải quyết được sự cố của tôi nhưng tôi muốn tìm cách khác (thay thế chuỗi đôi khi gây ra sự cố :)).

tôi đã đi lên với các giải pháp sau đây mà làm việc tốt trong IE, Chrome và Firefox:

var myUTCDateString = (function(d) { 
      return d.getUTCFullYear() + "-" + (d.getUTCMonth() +1) + "-" + d.getUTCDate() + " " + d.getUTCHours() + ":" + d.getUTCMinutes() + ":" + d.getUTCSeconds(); 
    })(new Date()); 

myUTCDateString là một cái gì đó như "2012/01/03 21:47:49".

0

tôi đã tìm thấy here và sửa đổi một helper:

// #region Date.prototype.toISONonUtcString 
// add Date prototype toISONonUtcString function if it doesn't yet exist 
if ($.isFunction(Date.prototype.toISONonUtcString) === false) { 
Date.prototype.toISONonUtcString = function() { 
    var pad = function (n, places) { 
     n = n.toString(); 
     for (var i = n.length; i < places; i++) { 
      n = "0" + n; 
     } 
     return n; 
    }; 
    var d = this; 
    return pad(d.getFullYear(), 4) + '-' + pad(d.getMonth() + 1, 2) + '-' + pad(d.getDate(), 2) + 'T' + 
       pad(d.getHours(), 2) + ':' + pad(d.getMinutes(), 2) + ':' + pad(d.getSeconds(), 2) + '.' + 
       pad(d.getMilliseconds(), 3); 
}; 
} 
// #endregion 
9

Tôi chạy vào cùng một vấn đề và tôi giải quyết nó bằng cách sử Ngày JavaScript() 's .toISOString() chức năng (chứ không phải làm một chuỗi thay thế).

See doc here.

DateTimeDateTimeOffset sẽ xử lý này một cách chính xác không phụ thuộc vào broswer gửi nó (trong thử nghiệm IE, Firefox và Chrome hạn chế của tôi).

Vì vậy, tôi gửi ngày với bộ điều khiển như vậy (đây là đối tượng JS của tôi):

var dateObject = new Date(); 
dateObject.toISOString() 

Và máy chủ có thể phân tích các dữ liệu như vậy (NET - trong bộ điều khiển):

DateTimeOffset timeInGMT = DateTime.Parse(dateString).ToUniversalTime(); //for the time in GMT 
DateTime timeOnClient = DateTime.Parse(dateString); //for time as it was set on the client. 
1

Khi tôi sử dụng hàm .toUTCString() trong IE, tôi gặp sự cố với UTCGMT và cũng với các số 0 đứng đầu.

Đây là những gì tôi sử dụng để gửi ngày UTC để ASP.NET MVC:

function getUTCString (date) { 

    function pad(n) { return n < 10 ? "0" + n : n }  

    var weekday = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; 
    var month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 

    return weekday[date.getUTCDay()] 
     + ", " + pad(date.getUTCDate()) 
     + " " + month[date.getUTCMonth()] 
     + " " + date.getUTCFullYear() 
     + " " + pad(date.getUTCHours()) 
     + ":" + pad(date.getUTCMinutes()) 
     + ":" + pad(date.getUTCSeconds()) 
     + " GMT"; 
}; 
Các vấn đề liên quan