所以我想做的是创建一个月的数组。但是当我在我的月份数组中添加几个月时,我得到了
[" 1月"," 2月"," 3月"," 3月"," 4月",& #34; May"," June"," July"," August"," September"," October&# 34;," 12月"]
结果是。但是在我添加到我的阵列之前,几个月打印得很好。
通知4月和11月属于' raw'输出。 我检查了this similar question和其他人,但他们并没有像我想象的那样相似。除了2月3日'问题。
如果重要,我使用的是Chrome版本59.0.3071.115(官方版本)(64位)
这是我的代码:
getMonths(form: string = 'long'): string[] {
if (form.toLowerCase() !== 'long' || form.toLowerCase() !== 'short') {
form = 'long';
}
if (!this.yearSelected) { // sets default year to today
this.yearSelected = this.today.getFullYear();
}
let months: string[] = [];
let locale: string = "en-US";
let month: Date;
// console.log(this.selectedYear);
for (let i = 0; i < 12; i++) {
month = new Date(this.yearSelected, i, 1);
console.log(month);
months.push(month.toLocaleString(locale, { month: form }));
console.log(months[i]); // <-getting odd output from here
}
return months;
}
在for循环中,我将1添加到了&#39; day&#39;根据我提供的链接参数。但我原来的代码是
month = new Date(this.yearSelected, i);
如果重要的话。我还在for循环结束时评论(用于指示)有问题的输出。
修改:刚刚更新为Chrome 60.0.3112.78
编辑:删除错字toLocalLowerCase - &gt; toLowercase()
编辑:所以这个问题与夏令时有关。感谢James&#39;建议,我添加15到月=新日期(this.yearSelected,i)因此它现在是月=新日期(this.yearSelected,i,15)。我将研究使用UTC dates - Mozilla link
答案 0 :(得分:1)
你在不同的时区,日期将它们转换为当地时间,它正确地执行,1917年4月1日的EDT,转换为美国东部时间,3月31日23:00:00,这就是为什么你得到3月,三月。
这是纯TypeScript问题以及TypeScript如何转换回JavaScript,TypeScript与UTCString而不是LocaleTimeString没有相同的问题。
getMonths(form: string = 'long'): string[] {
if (form.toLowerCase() !== 'long' || form.toLowerCase() !== 'short') {
form = 'long';
}
if (!this.yearSelected) { // sets default year to today
this.yearSelected = this.today.getFullYear();
}
let months: string[] = [];
let locale: string = "en-US";
let month: Date;
// console.log(this.selectedYear);
for (let i = 0; i < 12; i++) {
month = new Date(this.yearSelected, i);
console.log(month);
months.push(month.toUTCString(locale, { month: form }));
console.log(months[i]); // <-getting odd output from here
}
return months;
}
按预期返回["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
答案 1 :(得分:0)
布莱恩和詹姆斯提到这是一个夏令时问题。我使用了James的建议并添加了
month = new Date(this.yearSelected, i, 15); // 15 to avoid daylight savings time issues
解决了这个问题。我还看到我可以在js中使用UTC日期,我会调查。感谢。