我正在努力将Moment Timezone实现到Django应用程序中,以便纠正从不同时区访问它的用户,并且在通过Require.js导入文件时遇到错误。 moment.js,moment-timezone.js和moment-timezone-data.js都在加载,但是当我的脚本运行并尝试启动它们时,moment-timezone.js和moment-timezone-data.js会抛出Uncaught TypeErrors。
我的moment-timezone-data.js文件是从Moment.js timezone data generator复制粘贴的,看起来像这样(虽然有更多的时区):
moment.tz.add({
"zones": {
"America/New_York": [
"-4:56:2 - LMT 1883_10_18_12_3_58 -4:56:2",
"-5 US E%sT 1920 -5",
"-5 NYC E%sT 1942 -5",
"-5 US E%sT 1946 -5",
"-5 NYC E%sT 1967 -5",
"-5 US E%sT"
]
},
"rules": {
"US": [
"1918 1919 2 0 8 2 0 1 D",
"1918 1919 9 0 8 2 0 0 S",
"1942 1942 1 9 7 2 0 1 W",
"1945 1945 7 14 7 23 1 1 P",
"1945 1945 8 30 7 2 0 0 S",
"1967 2006 9 0 8 2 0 0 S",
"1967 1973 3 0 8 2 0 1 D",
"1974 1974 0 6 7 2 0 1 D",
"1975 1975 1 23 7 2 0 1 D",
"1976 1986 3 0 8 2 0 1 D",
"1987 2006 3 1 0 2 0 1 D",
"2007 9999 2 8 0 2 0 1 D",
"2007 9999 10 1 0 2 0 0 S"
],
"NYC": [
"1920 1920 2 0 8 2 0 1 D",
"1920 1920 9 0 8 2 0 0 S",
"1921 1966 3 0 8 2 0 1 D",
"1921 1954 8 0 8 2 0 0 S",
"1955 1966 9 0 8 2 0 0 S"
]
},
"links": {}
});
requireConfig文件设置如下:
require = {
paths: {
"moment": ServerInfo.generateStaticPathFor("js/ext/moment/moment-with-langs"),
"moment-timezone": ServerInfo.generateStaticPathFor("js/ext/moment/moment-timezone"),
"moment-timezone-data": ServerInfo.generateStaticPathFor("js/ext/moment/moment-timezone-data")
},
shim: {
"moment-timezone-data": {
"deps": ["moment-timezone"]
}
}
};
然后我尝试像这样启动Moment Timezone:
define(["moment", "moment-timezone", "moment-timezone-data"], function(moment) {
var thisMoment = moment().tz('America/New_York').startOf('day');
});
moment-timezone-data.js在第1行抛出Uncaught TypeError“无法调用方法'添加'未定义”:
moment.tz.add({ ... });
moment-timezone.js在第308行抛出一个Uncaught TypeError“无法调用未定义的方法'规则”:
return [zone, zone.rule(mom, lastZone)];
答案 0 :(得分:11)
您的define()
来电仅需要moment-timezone
和moment-timezone-data
。从本质上讲,moment-timezone
就像moment
的替代品一样,将其扩展为提供.tz()
。请参阅the example:
define(["moment-timezone", "moment-timezone-data"], function (moment) {
moment().tz("America/Los_Angeles").format();
});
此外,您不需要填充时区数据。相反,只需选择" AMD"使用the timezone data builder时的选项。
答案 1 :(得分:1)
如果切换依赖关系顺序会有什么不同吗?我相信时刻 - 时区依赖于时刻 - 时区 - 数据,而不是相反。但我不确定这里是否重要。
答案 2 :(得分:1)
当我在时区输入拼写错误时,我收到了这个错误。
例如。 moment().tz("America/Los_Anegles").format();
答案 3 :(得分:0)
在cdnjs下使用缩小版本的moment-timezone.js时,我遇到了这个问题。 刚刚更改为从moment timezone website下载并完成工作的完整资源!
(function($) {
moment.tz.add({
"zones": {
"America/Mexico_City": [
"-6:36:36 - LMT 1922_0_1_0_23_24 -6:36:36",
"-7 - MST 1927_5_10_23 -7",
"-6 - CST 1930_10_15 -6",
"-7 - MST 1931_4_1_23 -7",
"-6 - CST 1931_9 -6",
"-7 - MST 1932_3_1 -7",
"-6 Mexico C%sT 2001_8_30_02 -5",
"-6 - CST 2002_1_20 -6",
"-6 Mexico C%sT"
]
},
"rules": {
"Mexico": [
"1939 1939 1 5 7 0 0 1 D",
"1939 1939 5 25 7 0 0 0 S",
"1940 1940 11 9 7 0 0 1 D",
"1941 1941 3 1 7 0 0 0 S",
"1943 1943 11 16 7 0 0 1 W",
"1944 1944 4 1 7 0 0 0 S",
"1950 1950 1 12 7 0 0 1 D",
"1950 1950 6 30 7 0 0 0 S",
"1996 2000 3 1 0 2 0 1 D",
"1996 2000 9 0 8 2 0 0 S",
"2001 2001 4 1 0 2 0 1 D",
"2001 2001 8 0 8 2 0 0 S",
"2002 9999 3 1 0 2 0 1 D",
"2002 9999 9 0 8 2 0 0 S"
]
},
"links": {}
});
console.log(moment().tz("America/Mexico_City").format());
})(jQuery);