上記の回答のどれも本当に役に立たなかったので、私はこの問題の解決に取り組んでいます。私はjqueryの週のカレンダーを使用していて、サーバーとページのローカルにタイムゾーン情報を取得するために日付が必要でした。かなり掘り下げた後、私は他の人を助けるかもしれない解決策を見つけました。
私はasp.net 3.5、vs 2008、asp.net MVC 2、jquery週カレンダーを使用しています。
まず、クライアント側で日付を処理するのに役立つ、Steven Levithanが作成したライブラリー、Steven Levithanの日付ライブラリーを使用しています。isoUtcDateTime形式は、必要なものに最適です。私のjquery AJAX呼び出しでは、isoUtcDateTime形式のライブラリで提供されるformat関数を使用し、ajax呼び出しがアクションメソッドに到達すると、datetime Kindがローカルに設定され、サーバー時間を反映します。
AJAX経由でページに日付を送信するとき、「ddd、dd MMM yyyy HH ':' mm ':' s 'GMT'zzzz」を使用して日付をフォーマットすることにより、テキスト文字列として送信します。このフォーマットは、クライアント側を使用して簡単に変換されます
var myDate = new Date(myReceivedDate);
以下は、私の完全なソリューションからダウンロードしたSteve Levithanのソースを除いたものです。
コントローラ:
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シリアライゼーションと非常にうまく機能し、タイムゾーン全体で日付を正確に保ちます。