Ich habe an einer Lösung für dieses Problem gearbeitet, da mir keine der oben genannten Antworten wirklich geholfen hat. Ich arbeite mit dem jquery-Wochenkalender und benötigte meine Daten, um Zeitzoneninformationen auf dem Server und lokal auf der Seite zu haben. Nachdem ich mich ein bisschen umgesehen hatte, fand ich eine Lösung, die anderen helfen könnte.
Ich verwende asp.net 3.5 im Vergleich zu 2008, asp.net MVC 2 und den jquery-Wochenkalender.
Erstens verwende ich eine von Steven Levithan geschriebene Bibliothek, die beim Umgang mit Daten auf der Client-Seite hilft, Steven Levithans Datumsbibliothek . Das isoUtcDateTime-Format ist perfekt für das, was ich brauchte. In meinem AJAX-Aufruf von jquery verwende ich die Formatfunktion, die mit der Bibliothek im isoUtcDateTime-Format bereitgestellt wird. Wenn der Ajax-Aufruf meine Aktionsmethode trifft, wird die Datetime-Art auf lokal gesetzt und spiegelt die Serverzeit wider.
Wenn ich Daten über AJAX an meine Seite sende, sende ich sie als Textzeichenfolgen, indem ich die Daten mit "TTT, TT MMM JJJJ HH ':' MM ':' SS 'GMT'zzzz" formatiere. Dieses Format kann problemlos clientseitig konvertiert werden
var myDate = new Date(myReceivedDate);
Hier ist meine Komplettlösung abzüglich der Quelle von Steve Levithan, die Sie herunterladen können:
Regler:
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>
Ich hoffe, dieses kurze Beispiel hilft anderen in der gleichen Situation, in der ich mich befand. Derzeit scheint es sehr gut mit der Microsoft JSON-Serialisierung zu funktionieren und meine Daten über Zeitzonen hinweg korrekt zu halten.