繁体   English   中英

.net DateTime到JavaScript日期

[英].net DateTime to JavaScript Date

我有一个MVC5 Web应用程序作为我的时间记录应用程序的Web界面。 我的Android应用将其时间作为字符串发送到服务器,在那里我将其解析为.NET DateTime并将其存储在数据库中。 当我再次加载时间记录并创建一个JavaScript数组时,我又增加了一个小时。 我已经尝试了很多,但是这篇文章似乎解决了这个问题: stackoverflow

new Date(date.valueOf() + date.getTimezoneOffset() * 60000);

我的问题是:这是正确的方法吗? 我不需要任何文化或时区来记录时间。 从上午6点开始到下午6点结束的时间记录始终具有此值。 实际上,它甚至必须具有此值! 难道没有办法告诉JavaScript Date它不执行我的时间吗? 只保留我设置的值吗?

更新/扩展:我的网络界面是MVC5应用程序,与Android手机的通信是通过WCF服务完成的。 为了使我上面发布的代码运行,我踢出了JavaScriptSerializer并使用StringBuilder编写了JSON数组。 这使我可以包括上面发布的片段,并使其在客户端上执行。 我还尝试将所有DateTime.Kind(本地,未指定和UTC)与JavascriptSerializer结合使用,但均未成功。

同样,我需要在客户端修改日期时间。

有了Matt的答案,我现在看到三个选择:

  1. 我的代码在上面
  2. 解析DateTime并为GMT附加Z
  3. 在Global.ascx Application_Start中添加SerializerSettings.DateTimeZoneHandling。

干杯,斯特凡

这个问题很难说清楚,但是在存储日期时,您需要使用协调世界时(UTC),这使以后的工作变得更容易。 Javascript将所有工作日期定为本地时间,但是如果服务器发送的是UTC时间,则可以轻松进行转换。

因此,如果服务器发送(例如,以JSON "2014-03-09T21:25:05.937Z" )您的日期值,例如"2014-03-09T21:25:05.937Z" ,则可以使用以下命令在用户的本地时间获取它:

var localDate = new Date(Date.parse("2014-03-09T21:25:05.937Z"))

这使localDate的值为Mon Mar 10 2014 10:25:05 GMT+1300 (New Zealand Daylight Time) (在我的时区中)。

关键位是日期字符串末尾的“ Z”。 这会将其标记为Zulu-time / UTC ...从那里开始,javascript可以为您转换。

如果您使用的是WebAPI,则即使存储了本地日期,以下内容也可以帮助解决问题:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM