1. 获取当前月份的前6个月
1.1 bug版本
初听此需求时, 心想如此简单的需求,岂不是分分钟搞定, 于是乎 30s 过后
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
const arr = []
for (let i = 6; i >0; i--){
arr.push(`${year}-${month - i}`)
}
console.log(arr); // ['2022--3', '2022--2', '2022--1', '2022-0', '2022-1', '2022-2']
好像不大对, 月份没有负数, 需要往前一年。那岂不是还要,判断月份是否 < 1, 然后改年份。如果往前 24个月, 岂不是很烦,作为一个能少写一行代码就少写一行代码的我而言。不能忍受
于是乎,我想到了小学数学: 除法
1.2 利用小学数学解决
function getMonths(time, offset = 6) {
const date = new Date(time);
let arr = [];
let y = date.getFullYear();
let m = date.getMonth() + 1;
let all = y * 12 + m;
for (let i = all - offset; i < all; i ++) {
const year = Math.floor(i / 12);
let month = (i % 12) + 1;
month = (month + '').replace(/^(\d)$/g, "0$1");
arr.push(year + '-' + month)
}
return arr
}
getMonths('2019-5', 24);
2. 时间格式化
日常工作中, 时间戳转换为标注函数,非常常用。于是乎
接受一个 time, 和一个 config 配置, 利用正则。 不过呢,好像不是很实用 😳
function getTime(time, config = [
{
methods: 'getFullYear',
splicing: '-',
add: ''
},
{
methods: 'getMonth',
splicing: '-',
add: 1
},
{
methods: 'getDate',
splicing: ' ',
add: ''
},
{
methods: 'getHours',
splicing: ':',
add: ''
},
{
methods: 'getMinutes',
splicing: ':',
add: ''
},
{
methods: 'getSeconds',
splicing: '',
add: ''
}
]) {
time = time * 1000
let date = new Date(time)
let target = ''
config.forEach((item) => {
target +=
(date[item.methods]() + item.add + '').replace(/^(\d)$/, '0$1') +
item.splicing
})
return target
}
3. toLocaleString
初用此方法时,感觉特别好用. 后面的参数, 暂时没找到, 相对应的文档。不过大致猜测; 第一个参数: 对应语言的格式 第二参数: 额外的配置,可以设置 年月日分秒的格式,以及是否12时辰
new Date(1650271989000).toLocaleString('chinese',{hour12:false}) // '2022/4/18 16:53:09'
new Date(1650271989000).toLocaleString('chinese', { year: 'numeric', month: '2-digit', day: '2-digit',hour: '2-digit', minute: '2-digit', second: '2-digit',hour12: false}); // '2022/04/18 16:53:09'