使用香草JS,是否有可能得到一個數組?例如:是否有可能使用vanilla JavaScript獲取所有月份的列表?
['January', ..., 'December']
雖然存在,是有意義的使用,而不是重新發明輪子像moment.js圖書館,有時它需要的/必要的香草JS來實現。
使用香草JS,是否有可能得到一個數組?例如:是否有可能使用vanilla JavaScript獲取所有月份的列表?
['January', ..., 'December']
雖然存在,是有意義的使用,而不是重新發明輪子像moment.js圖書館,有時它需要的/必要的香草JS來實現。
Date.prototype.toLocaleDateString()
可以生成月份名稱,因此可以生成12個項目的數組並將每個項目的索引(0 - 11)映射到月份名稱。
const months = new Array(12).fill(0).map((_, i) => {
return new Date(`${i + 1}/1`).toLocaleDateString(undefined, {month: 'long'})
});
console.log(months);
上面的代碼記錄月份的數組:
[
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
]
下面是它如何工作的:
new Array(12)
初始化長度的新陣列12.fill(0)
初始化所有項0
.map(...)
映射所有12名0
在數組(_, i) => { ... }
的是,忽略所述第一參數(這是一個功能項目本身,在每種情況下它將爲0
)並且僅使用索引,其將從0
到11
new Date(`${i + 1}/1`)
初始化具有MM/DD格式的日期的新日期對象,其中月份是1基於指數和月份的日子總是1
。設置一天是必要的,因爲否則它默認是今天的日期,如果碰巧是> 28這個月可能會滾動到下一個(例如,如果今天是7/31但是i == 2,那麼日期將被初始化爲2月31日,這是不存在的,所以Date對象只是在5月產生一天).toLocaleDateString(undefined, {month: 'long'})
是魔法發生的地方。該對象包含一個formatMatcher
對象,該對象控制將日期格式化爲字符串時的格式。 month
屬性設置爲'long'
,以便生成完整的月份名稱(例如"July"
)。有趣的事實:第一個參數是未定義的,因此它不會覆蓋用戶的默認語言環境。這是因爲真棒法國用戶將自動看到法語月份名稱:["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"]
如果你想保持英國的幾個月裏,只是將該參數設置爲'en'
。
如果有幫助,這裏的改寫,使用舊JS語法相同的代碼:
var months = [];
for (var i = 0; i < 12; i++) {
var d = new Date((i + 1) + '/1');
months.push(d.toLocaleDateString(undefined, {month: 'long'}));
}
console.log(months);
我認爲使用setMonth
是更爲有效和更容易比創建一個明白來自串接字符串的日期。
const months= [];
const d = new Date();
for(let month = 0; month < 12; ++month) {
d.setMonth(month);
months.push(d.toLocaleString(undefined, {month: 'long'}));
}
console.log(months);
Downvoter(S),請讓我知道如果有什麼我可以改進。 –
你是否在發帖後5秒鐘回答你自己的問題? –
@zv_自從我在這裏搜索這個問題/答案後,我同時詢問/回答,但沒有找到答案。我想出了自己的想法,並認爲其他人可能對解決方案感興趣。 –