Javascript 反序列化无时区的JSON日期

Javascript 反序列化无时区的JSON日期,javascript,asp.net-mvc,json,datetime,Javascript,Asp.net Mvc,Json,Datetime,我有一个问题,从昨天开始就一直困扰着我,我不知道如何处理它 我的数据库中有一个日期字段,其中包含以下值: 然后我的应用程序获取该值并将其发送到我的web表单。(值仍然相同:)这很好 在客户端,我暂停了javascript警报,以查看来自JSON的值(值仍然相同:),这很好 客户端中警报的代码如下: // transaction json model var jsonTransaction = @(Html.Raw(Json.Encode(this.Model.Transacti

我有一个问题,从昨天开始就一直困扰着我,我不知道如何处理它

  • 我的数据库中有一个日期字段,其中包含以下值:

  • 然后我的应用程序获取该值并将其发送到我的web表单。(值仍然相同:)这很好

  • 在客户端,我暂停了javascript警报,以查看来自JSON的值(值仍然相同:),这很好

客户端中警报的代码如下:

// transaction json model
var jsonTransaction = @(Html.Raw(Json.Encode(this.Model.Transaction))); 
alert(new Date(parseInt(jsonTransaction.Date.substr(6))));
  • 现在,当我将值发送回服务器时,这就是我得到的值

  • 最后,在JSON反序列化之后,我的日期时间是错误的!!现在是第8天,而不是第7天

这是反序列化的代码:

public JsonResult SaveBill(string jsonTransaction, string jsonTranDetails)
{
    _appState = this.AppState;
    JsonResult returnVal = returnVal = Json(
       new { Success = true }
    );

var transaction = JsonConvert.DeserializeObject<BillTransaction>(jsonTransaction, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });
public JsonResult SaveBill(字符串jsonTransaction,字符串jsonTranDetails)
{
_appState=this.appState;
JsonResult returnVal=returnVal=Json(
新建{Success=true}
);
var transaction=JsonConvert.DeserializeObject(jsonTransaction,新的JsonSerializerSettings(){NullValueHandling=NullValueHandling.Ignore});
如果有任何关于如何用日期来解决这个问题的线索,我应该得到相同的日期,因为我没有改变任何事情。希望有人能指导我找到解决方案


提前感谢。

Java脚本在将日期解析为currentdate=new date(123232)时使用通用时间 所以,当您向客户端发送日期时,请将其转换为ISO日期,例如 将日期转换为strong之前,请确保日期为UTC

return String.Format("{0:yyyy-MM-ddTHH:mm:ss.fffZ}", dt); 

顺便说一句,我已经创建了JSON转换来覆盖客户端的任何日期序列化以使用上述函数。

如果使用Newtonsoft的JSON.NET,这个问题就会消失。ASP.NET MVC 4的新web API使用相同的解析器。这应该讨论所有你需要知道的:我获得相同日期的唯一方法是在服务器si上这样做de:JsonConvert.DeserializeObject(jsonTransaction,新JsonSerializerSettings(){NullValueHandling=NullValueHandling.Ignore,DateFormatHandling=DateFormatHandling.MicrosoftDateFormat,DateTimeZoneHandling=DateTimeZoneHandling.Local});但不知道是否使用DateTimeZoneHandling.Local可以??这取决于服务器端反序列化代码。JSON编码为字符串-
“日期(1341706634733)”
-正在被服务器端代码中的某个内容解释。该时间戳用于正确的日期。没有标准的方法用JSON编码日期,因此这取决于
JsonConvert
代码的工作方式。反序列化程序代码似乎将时间戳解释为相对于本地时间,而不是UTC t我认为这是错误的:
DateTimeZoneHandling=DateTimeZoneHandling.Local
但我不熟悉该软件。应该有一个选项将其设置为UTC,所以我会尝试。