【发布时间】:2017-08-19 09:35:53
【问题描述】:
我想将不同时区的日期转换为字符串 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”语言环境解析)。
字符串日期位于“欧洲/阿姆斯特丹”时区。 但是在解析例程中,我无法设置字符串日期所在的时区。
如果我想要相同的结果,与机器所在的位置无关; 我必须使用 utc 来解析它。
似乎那一刻缺少同时解析带有语言环境和时区的日期的选项。
旁注:因为 moment 是单例; (所有需要(“时刻”)都得到 返回同一个对象),我不想立即设置语言环境或时区, 因为这会影响应用程序的其他部分 没有任何控制权(许多图书馆使用时刻)
所以要解决我的问题,我只能看到解决方案,现在打印日期 作为iso字符串,然后解析iso字符串并提供时区。
但是进行两次日期解析,这对我来说真的没有意义。
【问题讨论】:
-
moment.js 默认只支持英文(使用moment.locales),如果你想支持,你需要导入其他语言。抱歉,语言代码被称为“语言环境”有点麻烦。语言环境是一个小的地理区域或地方。语言很少局限于这么小的区域,除了通常不在网络上使用的部落语言。
-
嗨,罗伯!我的第二个示例使用“de”语言环境。语言环境在 moment.js 中确实有效。这不是问题。问题真的是,我无法解析带有时区的语言环境中的日期。现在,我可以解析德国日期语言环境,并指定美国东部时区。我为什么要这样做?因为我在多台机器上运行代码,这些机器位于不同时区的数据中心。
标签: javascript date datetime momentjs