moment.js用语言和时区解析日期

时间:2017-08-19 09:35:53

标签: javascript date datetime momentjs

我希望将我拥有的不同时区的日期转换为字符串 ISO日期。

什么有效:使用时区解析非本地化的日期:

var sdate = "2016-12-13 09:45:46"
var m = moment.tz(sdate, "Europe/Amsterdam");
var iso = m.toISOString();
console.log(iso);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data.js"></script>

但是当我有一个德语(“de”语言环境)的日期时,那个 有时区,然后我什么也做不了。

var sDateRaw = "16. Aug. 2017 12:21"
var m = moment.utc(sDateRaw, "DD. MMM. YYYY hh:mm", "de");
var iso = m.toISOString();
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data.js"></script>

在第二种情况下,我需要提供“de”语言环境,因为月份 字符串需要语言环境。 (某些月份名称无法使用“en”语言环境进行解析)。

字符串日期在时区“Europe / Amsterdam”。 但是在解析例程中,我无法设置字符串日期所在的时区。

如果我想要相同的结果,独立于机器所在的位置; 我必须使用utc来解析它。

似乎那个时刻缺少一个同时用语言环境和时区解析日期的选项。

旁注:因为时刻是单身人士; (所有要求(“时刻”)确实得到 回到同一个对象),我不想在瞬间设置语言环境或时区, 因为这会影响我的应用程序的其他部分 没有任何控制权(许多图书馆使用时刻)

所以为了解决我的问题,我只能看到解决方案,现在打印日期 作为iso字符串,然后解析iso字符串并提供时区。

但是做两次日期解析,对我来说这没有用。

1 个答案:

答案 0 :(得分:0)

“区域设置”仅在您使用区域设置时才有效。 moment.js文档很差,因为它非常简短并且将术语“语言环境”与“语言”混淆。

解析字符串时,应传递:

  1. 要解析的字符串
  2. 格式,也可以选择
  3. 使用ISO 639语言代码的字符串语言。
  4. 第三个参数在文档中称为“locale”,但它实际上是一种语言,不应与“locale”在日期,时间,时区和格式方面的其他用途(通常不合适)相混淆。< / p>

    术语“语言环境”是指一个较小的地理区域,如郊区或村庄。它通常与tz时区指示符相关联,如非洲/开罗,它实际上是一个地方或地区。它被错误地应用于定义日期的格式,并且在moment.js文档中表示语言(有时)。

    无论如何,如果要解析具有不同语言的字符串,请将moment.js与语言环境(语言)结合使用。

    e.g。与 moment-with-locales.min.js

    var sDateRaw = "16. Aug. 2017 12:21"
    var m = moment.utc(sDateRaw, "DD. MMM. YYYY hh:mm", "de");
    var iso = m.toISOString();
    console.log(iso);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data.js"></script>

    要在多个位置使用时间,请将所有内容保留在UTC中,并仅使用当地时间进行显示。