一段时间
// 现在的时间
let now = new Date();
// 近一周
let date1 = new Date(now.getTime() - (1000 * 60 * 60 * 24 * 7));
// 近30天
let date2 = new Date(now.getTime() - (1000 * 60 * 60 * 24 * 30));
// 近半年
let date3 = new Date(now.getTime() - (1000 * 60 * 60 * 24 * 180));
// 近一年
let date4 = new Date(now.getTime() - (1000 * 60 * 60 * 24 * 365));
gettime(date){
let Y = date.getFullYear() + '-';
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
return Y + M + D
},
console.log(this.gettime(now))
console.log(this.gettime(date1))
console.log(this.gettime(date2))
console.log(this.gettime(date3))
console.log(this.gettime(date4))
获取一段时间之间的所有天数
function getDateBetween(start, end) {
var result = [];
//使用传入参数的时间
var startTime = new Date(start);
var endTime = new Date(end);
while (endTime - startTime >= 0) {
let year = startTime.getFullYear();
let month = startTime.getMonth();
month = month<9?'0'+(month+1):month+1;
let day = startTime.getDate().toString().length == 1 ? "0" + startTime.getDate() : startTime.getDate();
//加入数组
result.push(year + "-" + month + "-" + day);
//更新日期
startTime.setDate(startTime.getDate() + 1);
}
return result;
}
测试结果:
console.log(getDateBetween('2020-9-12','2020-10-28'));

获取一段时间之间的所有的月份
function getMonthBetween(start,end){
//初始化数组
var result = [];
//切割起始年月
var s = start.split("-");
//切割结束年月
var e = end.split("-");
//获取时间对象
var min = new Date();
var max = new Date();
//设置起始时间
min.setFullYear(s[0],s[1]);
//设置结束时间
max.setFullYear(e[0],e[1]);
//复制一份起始时间对象
var curr = min;
//定义字符串
var str = "";
//起始时间在结束时间之前
while(curr <= max){
//获取此时间的月份
var month = curr.getMonth();
//如果月份为0,也就是代表12月份
if(month===0){
str=(curr.getFullYear()-1)+"-"+12;
}else{//正常月份
str=curr.getFullYear()+"-"+(month<10?("0"+month):month);
}
//将此年月加入数组
result.push(str);
//更新此时间月份
curr.setMonth(month+1);
}
return result;
}
测试结果:
console.log(getMonthBetween('2018-09','2020-02'));

获取一段时间之间的所有的年份
function getYearBetween(start,end){
var result = [];
//使用传入参数的时间
var startTime = new Date(start);
var endTime = new Date(end);
while(endTime - startTime>=0 ) {
//获取年份
let year = startTime.getFullYear();
//加入数组
result.push(year);
//更新日期
startTime.setFullYear(startTime.getFullYear()+1);
}
return result;
}
测试结果:
console.log(getYearBetween('2017','2020'));

按月份对事件数组进行排序
const
MONTHS = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
events = [{ event: 'prom', month: 'MAY' }, { event: 'graduation', month: 'JUN' }, { event: 'dance', month: 'JAN' }];
events.sort((a, b) => MONTHS.indexOf(a.month) - MONTHS.indexOf(b.month));
console.log(events);
如果有时没有month属性或值与给定月份不同,则可以添加一个默认值,将此项移动到顶部(0)或底部({%13}或大于数组长度的值)。
const
MONTHS = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
events = [{ event: 'prom', month: 'MAY' }, { event: 'party', month: '' }, { event: 'graduation', month: 'JUN' }, { event: 'dance', month: 'JAN' }];
events.sort((a, b) =>
(MONTHS.indexOf(a.month) + 1 || Number.MAX_VALUE) -
(MONTHS.indexOf(b.month) + 1 || Number.MAX_VALUE)
);
console.log(events);
将带T的时间转换为北京时间格式
2023-09-25T01:45:05.000+00:00
export function utc2beijing(utc_datetime) {
// 转为正常的时间格式 年-月-日 时:分:秒
let T_pos = utc_datetime.indexOf('T');
let Z_pos = utc_datetime.indexOf('Z');
let year_month_day = utc_datetime.substr(0,T_pos);
let hour_minute_second = utc_datetime.substr(T_pos+1,Z_pos-T_pos-1);
let new_datetime = year_month_day+" "+hour_minute_second; // 2017-03-31 08:02:06
// 处理成为时间戳
timestamp = new Date(Date.parse(new_datetime));
timestamp = timestamp.getTime();
timestamp = timestamp/1000;
// 增加8个小时,北京时间比utc时间多八个时区
let timestamp = timestamp+8*60*60;
// 时间戳转为时间
let beijing_datetime = new Date(parseInt(timestamp) * 1000).toLocaleString().replace(/\//g,"-").replace(/上午|中午|下午|晚上/g, " ");
return beijing_datetime; // 2023-09-25 8:00:00
}