Я работал над решением этой проблемы, так как ни один из приведенных выше ответов действительно не помог мне. Я работаю с календарем недели jquery, и мне нужно, чтобы мои даты содержали информацию о часовом поясе на сервере и локально на странице. Немного покопавшись, я нашел решение, которое может помочь другим.
Я использую asp.net 3.5, 2008 г., asp.net MVC 2 и календарь недели jquery,
Во-первых, я использую библиотеку, написанную Стивеном Левитаном, которая помогает работать с датами на стороне клиента, Библиотека дат Стивена Левитана . Формат isoUtcDateTime идеально подходит для того, что мне нужно. В моем вызове jquery AJAX я использую функцию форматирования, предоставляемую библиотекой с форматом isoUtcDateTime, и когда вызов ajax затрагивает мой метод действия, тип datetime Kind устанавливается на local и отражает время сервера.
Когда я отправляю даты на свою страницу через AJAX, я отправляю их в виде текстовых строк, форматируя даты с использованием «ddd, dd MMM гггг ЧЧ ':' мм ':' ss 'GMT'zzzz". Этот формат легко конвертируется на стороне клиента с помощью
var myDate = new Date(myReceivedDate);
Вот мое полное решение без источника Стива Левитана, которое вы можете скачать:
Контроллер:
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>
Надеюсь, этот быстрый пример поможет другим в той же ситуации, в которой я находился. В настоящее время он, похоже, очень хорошо работает с сериализацией Microsoft JSON и сохраняет мои даты правильными во всех часовых поясах.