wft-utils
Version:
The commonly used tool functions in daily development
339 lines (317 loc) • 10.4 kB
JavaScript
/**
* 获取 num 天前日期
* @param {number} num
* @returns
*/
export function getDate(num) {
var date1 = new Date();
var date2 = new Date(date1);
date2.setDate(date1.getDate() + num);
//num是正数表示之后的时间,num负数表示之前的时间,0表示今天
var time2 = addZero(date2.getFullYear()) + "-" + addZero((date2.getMonth() + 1)) + "-" + addZero(date2.getDate());
return time2;
}
function addZero(num) {//补0方法
if (parseInt(num) < 10) {
num = '0' + num;
}
return num;
}
/**
* 获取指定日期的前一天
* @param {string} dateStr 输入的日期字符串,格式为 yyyy-MM-dd
* @returns {string} - 返回前一天的日期字符串,格式为 yyyy-MM-dd
*/
export function getPreviousDay(dateStr) {
const date = new Date(dateStr);
// 将日期减去1天
date.setDate(date.getDate() - 1);
// 格式化输出
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
/**
* 获取指定日期的后一天
* @param {string} dateStr 输入的日期字符串,格式为 yyyy-MM-dd
* @returns {string} - 返回后一天的日期字符串,格式为 yyyy-MM-dd
*/
export function getNextDay(dateStr) {
const date = new Date(dateStr);
// 将日期加上1天
date.setDate(date.getDate() + 1);
// 格式化输出
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
/**
* 获取当前月份第一天
* @returns
*/
export function getCurrentMonthFirst() {
var date = new Date();
date.setDate(1);
var month = parseInt(date.getMonth() + 1);
var day = date.getDate();
if (month < 10) {
month = '0' + month
}
if (day < 10) {
day = '0' + day
}
return date.getFullYear() + '-' + month + '-' + day;
}
/**
* 获取当前月份最后一天
* @returns
*/
export function getCurrentMonthLast() {
var date = new Date();
var currentMonth = date.getMonth();
var nextMonth = ++currentMonth;
var nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
var oneDay = 1000 * 60 * 60 * 24;
var lastTime = new Date(nextMonthFirstDay - oneDay);
var month = parseInt(lastTime.getMonth() + 1);
var day = lastTime.getDate();
if (month < 10) {
month = '0' + month
}
if (day < 10) {
day = '0' + day
}
return date.getFullYear() + '-' + month + '-' + day;
}
/**
* 获取当前周的第一天和最后一天
* @returns
*/
export function getCurrWeek() {
var d = new Date();
//获取周一
var beginWhereTheTime = GetMondayAndSunday(d);
var dd = new Date(beginWhereTheTime);
//获取周天
dd.setDate(dd.getDate() + 6);
var monthSunday = parseInt(dd.getMonth()) + 1;
var endWhereTheTime = dd.getFullYear() + "-" + formatDate(monthSunday) + "-" + formatDate(dd.getDate());
return {
Monday: beginWhereTheTime,
Sunday: endWhereTheTime
}
}
//获取指定日期所在周周一
function GetMondayAndSunday(dd) {
var week = dd.getDay(); //获取时间的星期数
var minus = week ? week - 1 : 6;
dd.setDate(dd.getDate() - minus); //获取minus天前的日期
var y = dd.getFullYear();
var m = dd.getMonth() + 1; //获取月份
var d = dd.getDate();
return y + "-" + formatDate(m) + "-" + formatDate(d);
}
//格式化月和日为MM、dd
function formatDate(value) {
if (value < 10) {
value = "0" + value;
}
return value;
}
/**
* 获取某天日期(yyyy-MM-dd)为周几
* @param {*} date
* @returns
*/
export function getWeek(date) {
var weekArray = new Array("周日", "周一", "周二", "周三", "周四", "周五", "周六");
var week = weekArray[new Date(date).getDay()];
return week;
}
/**
* 获取当前时间
* @returns
*/
export function getCurrTime() {
return {
currTime: new Date().toLocaleTimeString('chinese', { hour12: false }),
currTimeStamp: new Date().getTime()
}
}
/**
* 标准时间转为时间戳
* @param {string} dateTime
* @returns
*/
export function dateTimeToStamp(dateTime) {
return Date.parse(dateTime)
}
/**
* 时间戳转为标准时间
* @param {*} timeStamp
* @returns
*/
export function timeStampTodateTime(timeStamp) { //timeStamp:毫秒格式,即13位 如果是秒就 *1000
let s = new Date(timeStamp)
let y = s.getFullYear()
let m = (s.getMonth() + 1) < 10 ? '0' + (s.getMonth() + 1) : (s.getMonth() + 1)
let dd = s.getDate() < 10 ? '0' + s.getDate() : s.getDate()
let hh = s.getHours() < 10 ? '0' + s.getHours() : s.getHours()
let mm = s.getMinutes() < 10 ? '0' + s.getMinutes() : s.getMinutes()
let ss = s.getSeconds() < 10 ? '0' + s.getSeconds() : s.getSeconds()
let enddate = y + '-' + m + '-' + dd + ' ' + hh + ':' + mm + ":" + ss
return enddate
}
/**
* 秒数转为分:秒
* @param {number} time 秒数
* @returns 分:秒
*/
export function second2MinSec(time) {
const minutes = Math.floor(time / 60);
const seconds = Math.floor(time % 60);
return `${minutes}:${seconds.toString().padStart(2, "0")}`;
}
/**
* 将Tue Mar 08 2022 16:43:57 GMT+0800 (中国标准时间)转为标准时间格式(yyyy-MM-dd HH:mm:ss)
* @param {*} value
* @returns
*/
export function dateFormat(value) {
var date = new Date(value);
var YY = date.getFullYear() + '-';
var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var DD = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
var ss = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return YY + MM + DD + ' ' + hh + mm + ss;
}
/**
* 获取num月前的某天
* @param {*} num
* @param {*} day
* @returns
*/
export function getMonthDate(num = 0, day = '01') {
if(Number(day) < 10) day = '0' + Number(day)
let targetDate = new Date()
targetDate.setMonth(targetDate.getMonth() + num)
let [ date, time ] = dateFormat(targetDate).split(' ')
return date.split('-').slice(0, 2).join('-') + '-' + day
}
/**
* 秒数 转为 xx时xx分xx秒
* @param {string | number} value
* @returns
*/
export function formatSecondsToHour(value) {
let theTime = parseInt(value);// 秒
let middle = 0;// 分
let hour = 0;// 小时
if (theTime > 60) {
middle = parseInt(theTime / 60);
theTime = parseInt(theTime % 60);
if (middle > 60) {
hour = parseInt(middle / 60);
middle = parseInt(middle % 60);
}
}
let secondTime = parseInt(theTime) >= 10 ? parseInt(theTime) : '0' + parseInt(theTime)
let result = "" + secondTime + "秒";
if (middle > 0) {
let minuteTime = parseInt(middle) >= 10 ? parseInt(middle) : '0' + parseInt(middle)
result = "" + minuteTime + "分" + result;
}
if (hour > 0) {
result = "" + parseInt(hour) + "小时" + result;
}
return result;
}
/**
* 秒数 转为 xx天xx时xx分xx秒
* @param {string | number} value
* @returns
*/
export function formatSecondsToDay(value) {
let secondTime = parseInt(value) // 秒
let minuteTime = 0 // 分
let hourTime = 0 // 小时
let dayTime = 0 // 天
let result = ''
if (value < 60) {
result = secondTime + '秒'
} else {
if (secondTime >= 60) { // 如果秒数大于60,将秒数转换成整数
// 获取分钟,除以60取整数,得到整数分钟
minuteTime = parseInt(secondTime / 60)
// 获取秒数,秒数取佘,得到整数秒数
secondTime = parseInt(secondTime % 60)
// 如果分钟大于60,将分钟转换成小时
if (minuteTime >= 60) {
// 获取小时,获取分钟除以60,得到整数小时
hourTime = parseInt(minuteTime / 60)
// 获取小时后取佘的分,获取分钟除以60取佘的分
minuteTime = parseInt(minuteTime % 60)
if (hourTime >= 24) {
// 获取天数, 获取小时除以24,得到整数天
dayTime = parseInt(hourTime / 24)
// 获取小时后取余小时,获取分钟除以24取余的分;
hourTime = parseInt(hourTime % 24)
}
}
}
if (secondTime > 0) {
secondTime = parseInt(secondTime) >= 10 ? secondTime : '0' + secondTime
result = '' + secondTime + '秒'
}
if (minuteTime > 0) {
minuteTime = parseInt(minuteTime) >= 10 ? minuteTime : '0' + minuteTime
result = '' + minuteTime + '分' + result
}
if (hourTime > 0) {
result = '' + parseInt(hourTime) + '小时' + result
}
if (dayTime > 0) {
result = '' + parseInt(dayTime) + '天' + result
}
}
return result
}
/**
* 计算从00点开始算起,到某个时间点的秒数
* @param timeStr
* @returns
*/
export function getSecondsSinceMidnight(timeStr) {
// 验证输入格式(可选但推荐)
if (!/^\d{1,2}:\d{2}:\d{2}$/.test(timeStr)) {
throw new Error('Invalid time format. Expected "HH:mm:ss"');
}
const [hours, minutes, seconds] = timeStr.split(':').map(Number);
// 可选:校验数值范围
if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59 || seconds < 0 || seconds > 59) {
throw new Error('Invalid time values');
}
return hours * 3600 + minutes * 60 + seconds;
}
/**
* 将秒数转换为HH:mm:ss格式(0秒 -> 00:00:00)
* 搭配上面的getSecondsSinceMidnight方法 反向解析
* @param seconds
* @returns
*/
export function secondsToTime(seconds) {
// 可选:限制在一天范围内(0 ~ 86399)
if (seconds < 0 || seconds > 86399) {
throw new Error('Seconds must be between 0 and 86399 (inclusive)');
}
const hours = Math.floor(seconds / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const secs = seconds % 60;
// 补零到两位
const pad = (num) => String(num).padStart(2, '0');
return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
}