问题 来自IE的日期javascript对象无法自动绑定到ASP.NET MVC中的Datetime


我有一个使用jquery日历来显示事件的站点。 我注意到,在IE(所有版本)中使用系统时,ASP.NET MVC将无法将日期时间绑定到发回正确事件的操作。

事件顺序如下。

  • 日历发布到服务器以获取事件
  • Server ActionMethod接受开始日期和结束日期,自动绑定到datetime对象

在IE以外的每个浏览器中,开始和结束日期都是:

Mon, 10 Jan 2011 00:00:00 GMT

当IE发布日期时,它会通过as

Mon, 10 Jan 2011 00:00:00 UTC

然后,ASP.NET MVC 2将无法自动将其绑定到action方法参数。

有没有理由发生这种情况? 发布到服务器的代码如下:

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

4813
2018-01-14 11:12


起源

另一个很棒的IE功能。确实令人困惑。看看这个 west-wind.com/Weblog/posts/5054.aspx - Sentient


答案:


我遇到了同样的问题,我使用JavaScript Date()的.toISOString()函数解决了它(而不是做一个字符串替换)。

请参阅此处的doc。

DateTime 和 DateTimeOffset 无论broswer发送它(在我有限的IE,Firefox和Chrome测试中)都会正确处理。

所以,我把日期发送到控制器就像这样(这是我的JS对象):

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

并且服务器可以像这样解析数据(.NET - 在控制器中):

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.

9
2018-04-05 18:03





试着替换

start.toUTCString()

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

并看看是否不能解决你的问题:)


3
2018-01-14 11:48





当我使用该功能 .toUTCString() 在IE下,我遇到了麻烦 UTC VS GMT 还有前导零。

这是我用来向ASP.NET MVC发送UTC日期:

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"; 
};

1
2018-02-20 19:26





我也遇到过这种奇怪的情况。 在日期字符串中将UTC替换为GMT解决了我的问题,但我想寻找另一种方式(替换字符串有时会导致问题:))。

我提出了以下在IE,Chrome和Firefox中运行良好的解决方案:

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

myUTCDateString类似于“2012-1-3 21:47:49”。


0
2018-01-03 21:51





我发现了 这里 并修改了一个帮手:

// #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

0
2018-03-01 15:55