Files
ZYZ/shared/pubUtils/timeUtil.ts
2021-04-27 13:59:37 +08:00

277 lines
7.1 KiB
TypeScript

import { TIME_FORMAT, REFRESH_TIME, REFRESH_HOUR } from '../consts';
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
const PER_MINUTE = 60;
const PER_HOUR = 60 * 60;
export function getSeconds(time: Date) {
return Math.floor(time.getTime() / PER_SECOND);
}
export function nowSeconds() {
return Math.floor(Date.now() / PER_SECOND );
}
export function getTodayZeroPoint(hour = REFRESH_TIME) {
var date = new Date();
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
var time = Math.floor(date.getTime() / PER_SECOND);
return time;
}
export function checkTodayTime(seasonEndTime: number) {
if (seasonEndTime - nowSeconds() <= PER_DAY) {
return true;
}
return false;
}
export function getBeforeDayDate(day: number) {
let time = getTodayZeroPoint() - day * PER_DAY;
return time;
}
/**
* 获取几天以前(按秒获取)
* @param day 几天以前
*/
export function getBeforeDaySeconds(day: number) {
let time = nowSeconds() - day * PER_DAY;
return time;
}
export function getBeforeHourSeconds(hour: number) {
let time = nowSeconds() - hour * PER_HOUR;
return time;
}
export function getBeforeMinuteSeconds(minute: number) {
let time = nowSeconds() - minute * PER_MINUTE;
return time;
}
export function getBeforeSeconds(seconds: number) {
let time = nowSeconds() - seconds;
return time;
}
export function getCurWeekDate(day: number, hour: number) {
return getWeekDate(new Date(), day, hour);
}
export function getWeekDate(now: Date, day: number, hour: number){ //获得本周的开端日期
var nowDayOfWeek = now.getDay();
if(nowDayOfWeek == 0) nowDayOfWeek = 7;
let nowDay = now.getDate();
let nowYear = now.getFullYear(); //当前年
let nowMonth = now.getMonth(); //月
return new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + day, hour);
};
export function getCurWeekTime(day: number, hour: number) {
let data = getWeekDate(new Date(), day, hour);
return Math.floor(data.getTime()/PER_SECOND);
}
export function getCurMonthDate(day: number, hour: number) {
return getMonthDate(new Date(), day, hour);
}
export function getCurMonthTime(day: number, hour: number) {
let data = getMonthDate(new Date(), day, hour);
return Math.floor(data.getTime()/PER_SECOND);
}
/**
* @description 获取某个时间的当月的某一天的某一时
* @param {{Date}} now 时间
* @param {{number}} day 哪天
* @param {{number}} hour 几点
*/
export function getMonthDate(now: Date, day: number, hour: number){ //获得本周的开端日期
let nowYear = now.getFullYear(); //当前年
let nowMonth = now.getMonth(); //月
return new Date(nowYear, nowMonth, day, hour);
};
export function getHourPoint(hour: number) {
var date = new Date();
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
var time = Math.floor(date.getTime() / PER_SECOND);
if (nowSeconds() < time) {
return time - PER_DAY;
}
return time;
}
export function getCurHourPoint(hour: number, minute: number = 0, seconds: number = 0) {
var date = new Date();
date.setHours(hour);
date.setMinutes(minute);
date.setSeconds(seconds);
var time = Math.floor(date.getTime() / PER_SECOND);
return time;
}
/**
* 获取第2天凌晨几点的时间戳
* @param hour
*/
export function getNextHourPoint(hour: number) {
var date = new Date();
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
var time = Math.floor(date.getTime() / PER_SECOND);
if (nowSeconds() > time) {
return time + PER_DAY;
}
return time;
}
/**
* 返回今天的某个时间点
* @param time
* @param hour
*/
export function getTodayZeroDate(hour = 0) {
return getZeroDate(new Date(), hour);
}
/**
* 根据给定的时间获得某个时间点
* @param time
* @param hour
*/
export function getZeroDate(time: Date, hour = 0) {
let date = new Date(time.getTime());
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
return date;
}
export function getZeroDateByDeltaDay(delta: number) {
var date = new Date(new Date().getTime() + delta * PER_DAY * PER_SECOND);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
return date;
}
export function getAge(birthday: string) {
let d = new Date(birthday + ' 00:00:00');
let _year = d.getFullYear();
let _month = d.getMonth() + 1;
let _day = d.getDate();
let age = 0;
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
let day = now.getDate();
if (year >= _year && month >= _month && day >= _day) {
age = year - _year;
}else{
age = year - _year - 1;
}
return age
}
export function formatTime(d: Date, type: number) {
let year = d.getFullYear();
let month = d.getMonth() + 1;
let day = d.getDate();
let yearStr = year.toString();
let monthStr = month.toString();
let dayStr = day.toString();
if(type == TIME_FORMAT.TYPE_SLASH) {
if(day < 10) dayStr = '0' + dayStr;
if(month < 10) monthStr = '0' + monthStr;
return `${yearStr}/${monthStr}/${dayStr}`;
}
}
/**
* @description 获取指定时间后的某个时间点,如给定 date 后的晚八点整
* @export
* @param {Date} date 给定时间
* @param {number} h 给定小时
* @param {number} [m=0] 给定分钟
* @param {number} [s=0] 给定秒
* @returns {Date}
*/
export function getNextTime(date: Date, h: number, m = 0, s = 0, ms = 0): Date {
const milliseconds = date.getTime();
const timeToday = new Date(milliseconds).setHours(h, m, s, ms);
return timeToday >= milliseconds ? new Date(timeToday) : new Date(timeToday + PER_DAY * PER_SECOND);
}
/**
* 获得某个时间是星期几
* @param needHandle 是否处理周日
* @param {Date} time
*/
let week = undefined;
export function getCurDay(needHandle = false, time?: Date) {
if(!time) time = new Date();
let d = time.getDay();
if(week != undefined) {
d = week;
}
if(needHandle && d == 0) d = 7;
return d;
}
export function setWeek(d?: number) {
week = d;
if(d == 7) week = 0;
}
/**
*
* @param preDate
* @param curDate
*/
export function getDayGap(preDate: Date, curDate: Date) {
let cur = getZeroDate(curDate, REFRESH_HOUR);
let pre = getZeroDate(preDate, REFRESH_HOUR);
return Math.floor((cur.getTime() - pre.getTime()) / PER_DAY / PER_SECOND)
}
/**
* 获取某一天的 n * day 天之后
* @param preDate
* @param curDate
* @param day
*/
export function getNextDayByGap(preDate: Date, curDate: Date, day: number) {
let gap = getDayGap(preDate, curDate);
let n = Math.floor(gap / day);
let time = getAfterDateByDay(preDate, n * day);
return new Date(time * PER_SECOND);
}
/**
* 获取某个时间的 day 天之后
* @param day
*/
export function getAfterDateByDay(preDate: Date, day: number) {
let time = getZeroDate(preDate, REFRESH_HOUR).getTime() + day * PER_DAY * PER_SECOND;
return Math.floor(time/PER_SECOND);
}