【问题标题】:Converting moment UTC to Local date time将时刻 UTC 转换为本地日期时间
【发布时间】:2016-07-23 14:43:55
【问题描述】:

我将来自 .net 的 UTC .NET/JSON 日期放在客户端。当我运行以下命令时:

moment(value.Planet.when).utc()

webservice返回的日期:

"/Date(1469271646000)/"

我在 _d 参数中得到一个日期,显示当前准确的 UTC 日期,右侧为 GMT+0300。

我想将这个时间转换为用户机器上的本地时间,无论我做什么,我总是把时间弄回来 3 小时。

我这样做:

moment(value.Planet.when).local().format('YYYY-MM-DD HH:mm:ss')

我得到与 UTC 相同的日期时间。我不明白如何让 momentjs 显示相对于当地时间的 UTC 时间。我检查了 momentjs 对象确实是 UTC。

我想如果我通过 moment.utc() 函数传递我从 web 服务(最初来自数据库)获得的 UTC 日期,我可以运行 local() 函数,我会得到准确的相对于我所在地区的小时,但它不起作用。

【问题讨论】:

    标签: javascript momentjs datetime-format


    【解决方案1】:

    你可以使用 moment(date).format('YYYY-MM-DDTHH:mm:ss');

    例如:- 如果你约会“/Date(1469271646000)/”

    ip-> moment(1469271646000).format('YYYY-MM-DDTHH:mm:ss');

    op-> "2016-07-23T16:30:46"

    【讨论】:

      【解决方案2】:

      不要使用_d 属性。它仅供内部使用。请参阅this answerthe user guideMaggie's blog post on the subject

      就您如何转换为当地时间的问题而言,您实际上根本不需要转换。您已经在本地模式下解析输入值,因此您可以直接使用它:

      var m = moment("/Date(1469271646000)/");  // gives you a moment object in local mode.
      var s = m.format();   // lets you format it as a string.  Pass parameters if you like.
      var d = m.toDate();   // gives you a Date object if you really need one
      

      尽量避免使用Date 对象,除非您正在使用的某些其他控件或库需要它们。大多数操作都可以严格地在moment 对象上完成。

      【讨论】:

      • 我刚刚输入了一条新记录,如果我使用您的代码,我会得到 Sun Jul 24 2016 02:24:15 GMT+0300,但我的当地时间是 5:24 而不是 2:24。网络服务返回“/Date(1469316255000)/” - 所以我做错了什么。
      • 时间戳1469316255000对应2016-07-23T23:24:15.000Z。您可以在纯 JS 中或在许多网站上检查这一点,例如 epochconverter.com。您的输出会在三个小时后显示,因为您的本地时区偏移量是 +03:00。如果您期望它比这还要多三个小时,那么我会说您的网络服务正在发送错误的数据。也许你是双重纠正。
      • 例如,假设您的后端是 .NET,如果您在数据库中有基于 UTC 的值,但在检索它们时没有设置 DateTimeKind.Utc(使用 DateTime.SpecifyKind),那么它们默认情况下将有DateTimeKind.Unspecified。 ASP.Net 将在序列化过程中将这些时间视为本地时间,并减去服务器的本地时区偏移量。
      猜你喜欢
      • 2018-08-21
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      相关资源
      最近更新 更多