我有一个 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 的结合,但没有成功。
同样,我需要客户端未修改的日期时间。
根据马特的回答,我现在看到三个选择:
- 上面发布了我的代码
- 解析日期时间并为 GMT 附加 Z
- 在 Global.ascx Application_Start 中添加 SerializerSettings.DateTimeZoneHandling。
干杯, 斯特凡
最佳答案
很难从问题中看出,但在存储日期时您需要使用协调世界时 (UTC) - 它只会让以后的工作更容易。 Javascript 日期都以本地时间工作,但如果服务器发送的是 UTC 时间,您可以轻松转换。
因此,如果服务器发送下来(例如以 JSON 格式),您的日期值将类似于 "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;
关于javascript - .net 日期时间转 JavaScript 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22466003/