<script>
//获取当前日期
var getNowDate = function () {
var d = new Date();
var year = d.getFullYear();
var month = d.getMonth() + 1;
var day = d.getDate();
var dateStr = year + '-' + getFormatDate(month) + '-' + getFormatDate(day);
return dateStr;
}
//格式化日期的月份或天数的显示(小于10,在前面增加0)
function getFormatDate(value) {
var result;
result = value < 10 ? ("0" + value) : value;
return result;
}
//获取与毫秒数的转化比例(相差天数:1,相差小时数:2,相差分钟数:3,相差秒数:4)
var getDifferScale = function (value) {
var format;
//获取转化比(天数跟毫秒数的比例)
if (value == 1) {
format = parseFloat(24 * 60 * 60 * 1000);
}
//获取转化比(小时数跟毫秒数的比例)
else if (value == 2) {
format = parseFloat(60 * 60 * 1000);
}
//获取转化比(分钟数跟毫秒数的比例)
else if (value == 3) {
format = parseFloat(60 * 1000);
}
//获取转化比(秒数跟毫秒数的比例)
else if (value == 4) {
format = parseFloat(1000);
}
return format;
}
//获取两个日期的相差日期数(differ 相差天数:1、相差小时数:2、相差分钟数:3、相差秒数:4)
var getDifferDate = function (firstDate, secondDate, differ) {
//1)将两个日期字符串转化为日期对象
var startDate = new Date(firstDate);
var endDate = new Date(secondDate);
//2)计算两个日期相差的毫秒数
var msecNum = endDate.getTime() - startDate.getTime();
//3)计算两个日期相差的天数
var dayNum = Math.floor(msecNum /getDifferScale(differ));
return dayNum;
}
/**
* 按某个属性分组
* @param {*} arr
* @param {*} key 属性
* @returns
*/
function groupBy(arr, key) {
return arr.reduce((acc, curr) => {
(acc[curr[key]] = acc[curr[key]] || []).push(curr);
return acc;
}, {});
}
/**
* 根据日期查询当前月份的日期集合,
* @param datetime '2023-08-04' 或'2023-08'
*/
const currentMonthDayTimes=function(datetime){
let array=datetime.split('-')
let month=array[1]
let year=array[0]
//当小于10->01,02,03...
if(month<10 && !month.startsWith("0")){
month='0'+month;
}
// 获取当前月有多少天
let currentMonthDays = new Date(year, month, 0).getDate();
// 当前月份所有日期集合
let currentMonthDateArr = [];
for (let day = 1; day <= currentMonthDays; day++) {
// 年月日(yyyy-MM-dd)
let dateItem = year + "-" + month + "-" + (day < 10 ? '0' + day : day);
currentMonthDateArr.push(dateItem);
}
return currentMonthDateArr;
}
/**
* 计算当天每隔多少分钟时间集合
* @param {*} step 间隔分钟
* @returns
*/
const timeInterval=function timeInterval (step) { // step = 间隔的分钟
var date = new Date()
date.setHours(0) // 时分秒设置从零点开始
date.setSeconds(0)
date.setUTCMinutes(0)
var arr = [], timeArr = [];
var slotNum = 24*60/step // 算出多少个间隔
for (var f = 0; f < slotNum; f++) { // stepM * f = 24H*60M
// arr.push(new Date(Number(date.getTime()) + Number(step*60*1000*f))) // 标准时间数组
var time = new Date(Number(date.getTime()) + Number(step*60*1000*f)) // 获取:零点的时间 + 每次递增的时间
var hour = '', sec = '';
time.getHours() < 10 ? hour = '0' + time.getHours() : hour = time.getHours() // 获取小时
time.getMinutes() < 10 ? sec = '0' + time.getMinutes() : sec = time.getMinutes() // 获取分钟
timeArr.push(hour + ':' + sec)
}
return timeArr
}
/**
* 开始日期和结束日期差几天
* @param {String} startDate 开始日期
* @param {String} endDdate 结束日期
*/
const getDateByDays = (startDate, endDdate) => {
let d1 = Date.parse(new Date(startDate));
let d2 = Date.parse(new Date(endDdate));
// 时间戳相减 / 天数
let day = parseInt((d2 - d1) / (1000 * 60 * 60 * 24));
return day
}
/**
* 获取多少天之内的日期
* @param {*} dateNow 当前日期
* @param {*} intervalDays 天数,如30天的数据,31天数据
* @param {*} bolPastTime 是否是倒叙还是正序,true 是从30天前数据向后推
* @returns
*/
function getDateRange(dateNow,intervalDays,bolPastTime){
let oneDayTime = 24 * 60 * 60 * 1000;
let list = [];
let lastDay;
if(bolPastTime == true){
lastDay = new Date(dateNow.getTime() - intervalDays * oneDayTime);
list.push(formateDate(lastDay));
list.push(formateDate(dateNow));
}else{
lastDay = new Date(dateNow.getTime() + intervalDays * oneDayTime);
list.push(formateDate(dateNow));
list.push(formateDate(lastDay));
}
return list;
}
function formateDate(time){
let year = time.getFullYear()
let month = time.getMonth() + 1
let day = time.getDate()
if (month < 10) {
month = '0' + month
}
if (day < 10) {
day = '0' + day
}
return year + '-' + month + '-' + day + ''
}
/**
* 获取日期之间所有日期
* @param {*} start
* @param {*} end
* @returns
*/
function getAllDate(start, end){
let dateArr = []
let startArr = start.split('-')
let endArr = end.split('-')
let db = new Date()
db.setUTCFullYear(startArr[0], startArr[1] - 1, startArr[2])
let de = new Date()
de.setUTCFullYear(endArr[0], endArr[1] - 1, endArr[2])
let unixDb = db.getTime()
let unixDe = de.getTime()
let stamp
const oneDay = 24 * 60 * 60 * 1000;
for (stamp = unixDb; stamp <= unixDe;) {
dateArr.push(formateDate(new Date(parseInt(stamp))))
stamp = stamp + oneDay
}
return dateArr
}
//测试方法
var TestClick = function(){
var date1 = $("#Date1").val();
var date2 = $("#Date2").val();
var differ = $("#differ").val();
if(date1 == "" || date1==null){
alert("第一个日期不能为空");
}
else if(date2 == "" || date2==null){
alert("第二个日期不能为空");
}
else if(differ == "" || differ==null ){
alert("日期相差数不能为空");
}
var result = getDifferDate(date1,date2,differ);
console.log("输出结果:"+ result);
}
</script>