【问题标题】:Date javascript object from IE cannot be automatically bound to Datetime in ASP.NET MVC来自 IE 的日期 javascript 对象无法自动绑定到 ASP.NET MVC 中的日期时间
【发布时间】:2011-06-09 02:12:55
【问题描述】:

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

事件的顺序如下。

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

在除 IE 之外的所有浏览器中,开始和结束日期都是这样的:

Mon, 10 Jan 2011 00:00:00 GMT

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

Mon, 10 Jan 2011 00:00:00 UTC

ASP.NET MVC 2 将无法自动将其绑定到操作方法参数。

发生这种情况有什么原因吗? 发布到服务器的代码如下:

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

【问题讨论】:

标签: javascript asp.net jquery asp.net-mvc


【解决方案1】:

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

See doc here.

DateTimeDateTimeOffset 将正确处理此问题,无论浏览器发送它(在我有限的 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.

【讨论】:

    【解决方案2】:

    尝试替换

    start.toUTCString()
    

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

    看看这是否不能为你解决问题:)

    【讨论】:

      【解决方案3】:

      当我在 IE 下使用 .toUTCString() 函数时,我遇到了 UTCGMT 以及前导零的问题。

      这是我用来将 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"; 
      };
      

      【讨论】:

        【解决方案4】:

        我也遇到过这种奇怪的情况。 将日期字符串中的 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”。

        【讨论】:

          【解决方案5】:

          我找到了here 并修改了一个助手:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-08
            • 1970-01-01
            相关资源
            最近更新 更多