将时间戳转换为指定格式
if (!String.prototype.padStart) {
String.prototype.padStart = function(maxLength, fillString = ' ') {
if (Object.prototype.toString.call(fillString) !== "[object String]") throw new TypeError(
'fillString must be String')
let str = this
if (str.length >= maxLength) return String(str)
let fillLength = maxLength - str.length,
times = Math.ceil(fillLength / fillString.length)
while (times >>= 1) {
fillString += fillString
if (times === 1) {
fillString += fillString
}
}
return fillString.slice(0, fillLength) + str;
}
}
function timeFormat(dateTime = null, fmt = 'yyyy-mm-dd') {
if (!dateTime) dateTime = Number(new Date());
if (dateTime.toString().length == 10) dateTime *= 1000;
let date = new Date(dateTime);
let ret;
let opt = {
"y+": date.getFullYear().toString(),
"m+": (date.getMonth() + 1).toString(),
"d+": date.getDate().toString(),
"h+": date.getHours().toString(),
"M+": date.getMinutes().toString(),
"s+": date.getSeconds().toString()
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt;
}
时间戳转为多久之前
function timeFrom(dateTime = null, format = 'yyyy-mm-dd') {
if (!dateTime) dateTime = Number(new Date());
if (dateTime.toString().length == 10) dateTime *= 1000;
let timestamp = + new Date(Number(dateTime));
let timer = (Number(new Date()) - timestamp) / 1000;
let tips = '';
switch (true) {
case timer < 300:
tips = '刚刚';
break;
case timer >= 300 && timer < 3600:
tips = parseInt(timer / 60) + '分钟前';
break;
case timer >= 3600 && timer < 86400:
tips = parseInt(timer / 3600) + '小时前';
break;
case timer >= 86400 && timer < 2592000:
tips = parseInt(timer / 86400) + '天前';
break;
default:
if(format === false) {
if(timer >= 2592000 && timer < 365 * 86400) {
tips = parseInt(timer / (86400 * 30)) + '个月前';
} else {
tips = parseInt(timer / (86400 * 365)) + '年前';
}
} else {
tips = timeFormat(timestamp, format);
}
}
return tips;
}
获取每个月的天数
function getMonthDays(year, month) {
year = Number(year)
month = Number(month)
if ([1, 3, 5, 7, 8, 10, 12].indexOf(month) > -1) {
return 31
} else if ([4, 6, 9, 11].indexOf(month) > -1) {
return 30
} else {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ? 29 : 28
}
}
根据日期获取当天星期几
function getWeek(date, preFix = '星期') {
return `${
preFix}${
'日一二三四五六'.charAt(date ? new Date(date).getDay() : new Date().getDay())}`
}
根据起始日期和范围获取当前年分,月,日的集合,多用于datePicker
function getDatePop(scope, date) {
const
n1 = date.indexOf('/') || date.indexOf('-'),
n2 = date.lastIndexOf('/') || date.lastIndexOf('-'),
year = date.slice(0, 4),
month = date.slice(n1 + 1, n2),
day = date.slice(n2 + 1),
years = [],
months = [],
days = [];
for (let i = year; i <= year + scope; i++) {
years.push(i)
}
for (let i = 1; i <= 12; i++) {
months.push(i)
}
for (let i = 1; i <= getMonthDays(year, month); i++) {
days.push(i)
}
return {
years,
year,
months,
month,
days,
day,
indexValue: [years.indexOf(year), month - 1, day - 1],
dateArr: [
[year, month, day],
[year, month, day],
],
}
}
根据指定日期,获取未来一段时间的日期和星期
function getWeek(date, scope = 7,weekName='星期') {
date = date || new Date().toLocaleDateString();
let join = date.indexOf('/') > -1 ? '/' : '-',
n1 = date.indexOf(join),
n2 = date.lastIndexOf(join),
year = Number(date.slice(0, n1)),
month = Number(date.slice(n1 + 1, n2)),
day = Number(date.slice(n2 + 1)),
weekNumber = new Date(date).getDay(),
daysLong = getMonthDays(year, month),
weeks = [];
for (let i = day; i < day + scope; i++) {
let _weekChinese = numberToChinese(weekNumber % 7),
_week = `${
weekName}${
_weekChinese == '零' ? '日' : _weekChinese}`,
_month = (i <= daysLong ? month : month + 1) % 12 || 12,
_day = i <= daysLong ? i : i - daysLong,
_str = `${
_month}月${
_day}日`,
_date = `${
year}${
join}${
_month}${
join}${
_day}`;
weeks.push({
week: _week,
month: _month,
day: _day,
str: _str,
date: _date
})
weekNumber += 1
}
return weeks
}