javascript - .net 日期时间转 JavaScript 日期

标签 javascript asp.net-mvc asp.net-mvc-5

我有一个 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 的结合,但没有成功。

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

根据马特的回答,我现在看到三个选择:

  1. 上面发布了我的代码
  2. 解析日期时间并为 GMT 附加 Z
  3. 在 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/

相关文章:

javascript - 如何从列表框列表项中获取值

javascript - Spring Boot应用程序中的cors

javascript - 真正新手的 DRY Javascript

arrays - 发布字符串数组

c# - 调用异步方法时使用 .Wait() 的情况是什么

c# - User.Identity.GetUserId 是缓存还是每次都从数据库中获取?

javascript - 如何打开新的浏览器窗口以弹出?

asp.net-mvc - Visual Web Developer Express 中的 SubSonic ASP.NET MVC 示例

asp.net-mvc - MVC 中用于灵活调查的正确模型

asp.net-mvc - 在 ASP.NET MVC 3 的类库中使用 MEF