J'ai travaillé sur une solution à ce problème car aucune des réponses ci-dessus ne m'a vraiment aidé. Je travaille avec le calendrier de la semaine jquery et j'avais besoin de mes dates pour avoir des informations de fuseau horaire sur le serveur et localement sur la page. Après avoir longuement fouillé, j'ai trouvé une solution qui pourrait aider les autres.
J'utilise asp.net 3.5, vs 2008, asp.net MVC 2 et le calendrier de la semaine jquery,
Tout d'abord, j'utilise une bibliothèque écrite par Steven Levithan qui aide à gérer les dates côté client, la bibliothèque de dates de Steven Levithan . Le format isoUtcDateTime est parfait pour ce dont j'avais besoin. Dans mon appel AJAX jquery, j'utilise la fonction de format fournie avec la bibliothèque au format isoUtcDateTime et lorsque l'appel ajax atteint ma méthode d'action, le type datetime est défini sur local et reflète l'heure du serveur.
Lorsque j'envoie des dates sur ma page via AJAX, je les envoie sous forme de chaînes de texte en formatant les dates en utilisant "jjj, jj MMM aaaa HH ':' mm ':' ss 'GMT'zzzz". Ce format est facilement convertible côté client en utilisant
var myDate = new Date(myReceivedDate);
Voici ma solution complète moins la source de Steve Levithan, que vous pouvez télécharger:
Manette:
public class HomeController : Controller
{
public const string DATE_FORMAT = "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'zzzz";
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
public JsonResult GetData()
{
DateTime myDate = DateTime.Now.ToLocalTime();
return new JsonResult { Data = new { myDate = myDate.ToString(DATE_FORMAT) } };
}
public JsonResult ReceiveData(DateTime myDate)
{
return new JsonResult { Data = new { myDate = myDate.ToString(DATE_FORMAT) } };
}
}
Javascript:
<script type="text/javascript">
function getData() {
$.ajax({
url: "/Home/GetData",
type: "POST",
cache: "false",
dataType: "json",
success: function(data) {
alert(data.myDate);
var newDate = cleanDate(data.myDate);
alert(newDate);
sendData(newDate);
}
});
}
function cleanDate(d) {
if (typeof d == 'string') {
return new Date(d) || Date.parse(d) || new Date(parseInt(d));
}
if (typeof d == 'number') {
return new Date(d);
}
return d;
}
function sendData(newDate) {
$.ajax({
url: "/Home/ReceiveData",
type: "POST",
cache: "false",
dataType: "json",
data:
{
myDate: newDate.format("isoUtcDateTime")
},
success: function(data) {
alert(data.myDate);
var newDate = cleanDate(data.myDate);
alert(newDate);
}
});
}
// bind myButton click event to call getData
$(document).ready(function() {
$('input#myButton').bind('click', getData);
});
</script>
J'espère que cet exemple rapide aide les autres dans la même situation que celle dans laquelle je me trouvais. À l'heure actuelle, il semble très bien fonctionner avec la sérialisation Microsoft JSON et conserve mes dates correctes sur tous les fuseaux horaires.