2011-01-14 16 views
11

Tengo un sitio que utiliza un calendario jquery para mostrar eventos. Me he dado cuenta de que al utilizar el sistema desde IE (todas las versiones) ASP.NET MVC no podrá vincular la fecha y hora a la acción que envía los eventos correctos.Fecha JavaScript objeto de IE no puede vincularse automáticamente a Fecha y hora en ASP.NET MVC

La secuencia de eventos es la siguiente.

  • mensajes calendario para el servidor para obtener eventos
  • servidor ActionMethod acepta de inicio y final, con destino automáticamente a la fecha y hora objetos

En todos los navegadores que no sean IE de la fecha de inicio y final vienen a través como:

Mon, 10 Jan 2011 00:00:00 GMT 

Cuando IE puestos de la fecha, la hora a través

como
Mon, 10 Jan 2011 00:00:00 UTC 

ASP.NET MVC 2 no podrá vincular esto automáticamente al parámetro del método de acción.

¿Hay alguna razón para que esto suceda? El código que los mensajes en el servidor es el siguiente:

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

Otra gran característica de IE. De hecho, el infierno es confuso. Echa un vistazo a este http://www.west-wind.com/Weblog/posts/5054.aspx – Sentient

Respuesta

3

tratar de sustituir

start.toUTCString() 

con

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

y ver si esto no soluciona el problema para usted:)

0

También me he encontrado con esta situación extraña. Reemplazar UTC a GMT en la cadena de fecha resolvió mi problema, pero he querido buscar otra forma (reemplazar las cadenas a veces causa problemas :)).

Yo he llegado con la siguiente solución, que funcionaba bien en IE, Chrome y Firefox:

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

myUTCDateString es algo así como "03/01/2012 21:47:49".

0

que he encontrado here y modificar un ayudante: función

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

me encontré con el mismo problema y lo resolvió mediante JavaScript Date() 's .toISOString() (en lugar de hacer una cadena de reemplazo)

See doc here.

DateTime y DateTimeOffset procesará esto correctamente, independientemente de la broswer de enviarlo (en mi limitado de pruebas del IE, Firefox y Chrome).

Por lo tanto, enviar la fecha al controlador como tal (esto es mi JS objeto):

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

y el servidor puede analizar los datos como tal (NET - en el controlador):

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

Cuando utilizo la función .toUTCString() bajo IE, tuve problemas con UTC vs GMT y también con los ceros a la izquierda.

Esto es lo que utilizo para enviar a la fecha 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"; 
}; 
Cuestiones relacionadas