ฉันทำงานเกี่ยวกับวิธีแก้ไขปัญหานี้เนื่องจากไม่มีคำตอบใดที่ช่วยฉันได้ ฉันทำงานกับปฏิทิน jquery Week และต้องการวันที่ของฉันเพื่อให้มีข้อมูลโซนเวลาบนเซิร์ฟเวอร์และภายในเครื่องบนหน้าเว็บ หลังจากขุดไปรอบ ๆ ฉันหาวิธีแก้ปัญหาที่อาจช่วยคนอื่น
ฉันใช้ asp.net 3.5, vs 2008, asp.net MVC 2 และ jQuery week calendar
ครั้งแรกผมกำลังใช้ห้องสมุดที่เขียนโดยสตีเว่น Levithan ที่จะช่วยให้มีการจัดการกับวันที่บนฝั่งไคลเอ็นต์, สตีเว่น Levithan ห้องสมุดวัน รูปแบบ isoUtcDateTime เหมาะสำหรับสิ่งที่ฉันต้องการ ใน jquery โทร AJAX ของฉันฉันใช้ฟังก์ชั่นการจัดรูปแบบให้กับห้องสมุดที่มีรูปแบบ isoUtcDateTime และเมื่อการโทร ajax นิยมวิธีการกระทำของฉันชนิด datetime ตั้งเป็นท้องถิ่นและสะท้อนให้เห็นถึงเวลาเซิร์ฟเวอร์
เมื่อฉันส่งวันที่ไปยังหน้าของฉันผ่าน AJAX ฉันจะส่งพวกเขาเป็นสตริงข้อความโดยจัดรูปแบบวันที่โดยใช้ "ddd, dd MMM yyyy HH ':' mm ':' ss '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 Serialization