对于前端来说 关于 时间的各种 转换是是经常遇到的问题。今天记录下,省的来回查。耽误时间。有需要的可以借鉴下。
这是在vue2 项目下 用到的。需要安装 moment
我安装的是 "moment": "^2.29.4",
npm install moment
import moment from 'moment'
// 用法 this.time = date.dateNow(); // 默认选中当天
export default class {
//获取年月日
static dateYear() {
var today = new Date()
var dd = String(today.getDate()).padStart(2, '0')
var mm = String(today.getMonth() + 1).padStart(2, '0')
var yyyy = today.getFullYear()
return yyyy + '-' + mm + '-' + dd
}
//获取星期几
static dateWeek() {
var today = new Date()
var day = today.getDay()
var weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
return weeks[day]
}
//获取星期几
static getDateWeek(today) {
let day = new Date(today).getDay()
let weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
return weeks[day]
}
//获取当前时分秒
static dateTimeNow() {
var today = new Date()
var h = today.getHours()
var m = today.getMinutes()
var s = today.getSeconds()
if (m < 10) m = '0' + m
if (s < 10) s = '0' + s
return h + ':' + m + ':' + s
}
//根据当前日期 获取 本月日里要用的数据
static getCalendarData(date) {
// 创建一个Date对象,表示给定日期
let dateObj = new Date(date);
// 获取年、月、日
let year = dateObj.getFullYear();
let month = dateObj.getMonth() + 1; // 月份从0开始,需要加1
month = month < 10 ? "0" + month : month;
let day = dateObj.getDate();
day = day < 10 ? "0" + day : day;
// 格式化日期为"yyyy:mm:dd"
let formattedDate = `${year}-${month}-${day}`;
let week = this.getDateWeek(formattedDate);
let dayIdex = new Date(formattedDate).getDay()
// 返回格式化后的日期
return {
date: formattedDate,
day: day,
week: week,
dayIdex: dayIdex
};
}
//根据当月的第一天 获取日历所需数据
/**
*
* @param firstDay :2023-01-01
* @returns
*/
static getCalendarMonthData(firstDate) {
let firstDateIdex = new Date(firstDate).getDay()
let startDate = new Date(firstDate);
startDate.setDate(startDate.getDate() - firstDateIdex);
let year = new Date(firstDate).getFullYear();
let month = new Date(firstDate).getMonth() + 1; // 月份从0开始,需要加1
let lastDay = new Date(
new Date(year, month).valueOf() - 60 * 60 * 1000 * 24
);
let lastDate = year + "-" + (month >= 10 ? month : '0' + month) + "-" + lastDay.getDate() + ' 23:59:59';
let lastDateIdex = new Date(lastDate).getDay()
let endDate = new Date(lastDate);
endDate.setDate(endDate.getDate() + (6 - lastDateIdex));
const calendarData = [];
// 循环遍历整个月
let currentDate = startDate;
while (currentDate <= endDate) {
let tmepDay = this.getCalendarData(currentDate)
if (currentDate < new Date(firstDate)) {
tmepDay.currentNonth = 0
} else if (currentDate > new Date(lastDate)) {
tmepDay.currentNonth = 2
} else {
tmepDay.currentNonth = 1
}
// 将日期添加到日历数据数组中
calendarData.push(tmepDay);
// 增加一天
currentDate.setDate(currentDate.getDate() + 1);
}
let list = [];
for (let row = 0; row < 6; row++) {
list.push(calendarData.splice(0, 7));
}
return list
}
// 获取当天的入出时间--时间段 当天00:00:00开始 到 此刻
static dateNow() {
var day = new Date()
var day1 = day.getTime() // 获得当前时间戳
var start = moment(day1).format('YYYY-MM-DD 00:00:00')
var end = moment(day1).format('YYYY-MM-DD HH:mm:ss')
var time = []
time.push(start)
time.push(end)
return time
}
// 获取开始时间,结束时间--时间段 num是获取几天 如:1 7 30
static dateFun(num) {
var day = new Date()
var day1 = day.getTime() // 获得当前时间戳
var day2 = day1 - num * 24 * 60 * 60 * 1000 // 减多少天
var start = moment(day2).format('YYYY-MM-DD HH:mm:ss')
var end = moment(day1).format('YYYY-MM-DD HH:mm:ss')
var time = []
time.push(start)
time.push(end)
return time
}
static dateFun1(num) {
var num = num * 365
var day = new Date()
var day1 = day.getTime() // 获得当前时间戳
var day2 = day1 - num * 24 * 60 * 60 * 1000 // 减多少天
var start = moment(day2).format('YYYY-MM-DD')
var end = moment(day1).format('YYYY-MM-DD')
var time = []
time.push(start)
time.push(end)
return time
}
static dateFun2(num) {
var day = new Date()
var day1 = day.getTime() // 获得当前时间戳
var day2 = day1 - num * 24 * 60 * 60 * 1000 // 减多少天
var start = moment(day2).format('YYYY-MM-DD')
var end = moment(day1).format('YYYY-MM-DD')
var time = []
time.push(start)
time.push(end)
return time
}
// 获取昨天
static dateY() {
var time = (new Date).getTime() - 24 * 60 * 60 * 1000;
var date = new Date(time);
// 获取当前月份
var nowMonth = date.getMonth() + 1;
// 获取当前是几号
var strDate = date.getDate();
// 添加分隔符“-”
var seperator = "-";
// 对月份进行处理,1-9月在前面添加一个“0”
if (nowMonth >= 1 && nowMonth <= 9) {
nowMonth = "0" + nowMonth;
}
// 对月份进行处理,1-9号在前面添加一个“0”
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
// 最后拼接字符串,得到一个格式为(yyyy-MM-dd)的日期
var nowDate = date.getFullYear() + seperator + nowMonth + seperator + strDate;
// console.log(nowDate);
var time = [nowDate + ' 00:00:00', nowDate + ' 24:00:00']
return time
}
static dataChange(n) {
var time = n;
var timeBox = [];
if (time == 1) {
var timeBox = this.dateNow()
}
if (time == -1) {
var timeBox = this.dateY()
}
if (time == 7 || time == 30) {
var timeBox = this.dateFun(time)
}
return timeBox
}
// 没有符号的日期 转成带符号的 如:20220420000110641
static dateStr(str) {
let year = str.slice(0, 4)
let month = str.slice(4, 6)
let day = str.slice(6, 8)
let hh = str.slice(8, 10)
let mm = str.slice(10, 12)
let ss = str.slice(12, 14)
return year + '-' + month + '-' + day + ' ' + hh + ':' + mm + ':' + ss
}
static dateStr1(str) {
let year = str.slice(0, 4)
let month = str.slice(4, 6)
let day = str.slice(6, 8)
let hh = str.slice(8, 10)
let mm = str.slice(10, 12)
let ss = str.slice(12, 14)
return month + '.' + day + ' ' + hh + ':' + mm + ':' + ss
}
static leftRightTime(str, num) {
// var str = '2022-04-21 00:00:00'
var day = new Date(str).getTime()
var add = day + num * 24 * 60 * 60 * 1000
var start = moment(add).format('YYYY-MM-DD HH:mm:ss')
return start
}
static timeDate(str) {
return moment(str).format("YYYY-MM-DD")
}
static timeDate1(timestamp) {
return moment(parseInt(timestamp)).format('YYYY-MM-DD')
}
static timeToDate(timestamp, _format = 'YYYY-MM-DD HH:mm') {
return moment(parseInt(timestamp)).format(_format)
}
/**
*
* @param {*} date_1 YYYY-MM-DD
* @param {*} date_2 YYYY-MM-DD
* @returns num 工期的天数
*/
static getDiffDay(date_1, date_2) {
// 计算两个日期之间的差值
let totalDays, diffDate
let myDate_1 = Date.parse(date_1)
let myDate_2 = Date.parse(date_2)
// 将两个日期都转换为毫秒格式,然后做差
diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值
totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整
// console.log(totalDays)
return totalDays + 1 // 相差的天数
}
}
时间不够用 注释写得不够细,有啥问题可以私信我。