61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import type { NullableDateType } from '../interface';
|
|
import type { GenerateConfig } from '../generate';
|
|
|
|
export function setTime<DateType>(
|
|
generateConfig: GenerateConfig<DateType>,
|
|
date: DateType,
|
|
hour: number,
|
|
minute: number,
|
|
second: number,
|
|
): DateType {
|
|
let nextTime = generateConfig.setHour(date, hour);
|
|
nextTime = generateConfig.setMinute(nextTime, minute);
|
|
nextTime = generateConfig.setSecond(nextTime, second);
|
|
return nextTime;
|
|
}
|
|
|
|
export function setDateTime<DateType>(
|
|
generateConfig: GenerateConfig<DateType>,
|
|
date: DateType,
|
|
defaultDate: NullableDateType<DateType>,
|
|
) {
|
|
if (!defaultDate) {
|
|
return date;
|
|
}
|
|
|
|
let newDate = date;
|
|
newDate = generateConfig.setHour(newDate, generateConfig.getHour(defaultDate));
|
|
newDate = generateConfig.setMinute(newDate, generateConfig.getMinute(defaultDate));
|
|
newDate = generateConfig.setSecond(newDate, generateConfig.getSecond(defaultDate));
|
|
return newDate;
|
|
}
|
|
|
|
export function getLowerBoundTime(
|
|
hour: number,
|
|
minute: number,
|
|
second: number,
|
|
hourStep: number,
|
|
minuteStep: number,
|
|
secondStep: number,
|
|
): [number, number, number] {
|
|
const lowerBoundHour = Math.floor(hour / hourStep) * hourStep;
|
|
if (lowerBoundHour < hour) {
|
|
return [lowerBoundHour, 60 - minuteStep, 60 - secondStep];
|
|
}
|
|
const lowerBoundMinute = Math.floor(minute / minuteStep) * minuteStep;
|
|
if (lowerBoundMinute < minute) {
|
|
return [lowerBoundHour, lowerBoundMinute, 60 - secondStep];
|
|
}
|
|
const lowerBoundSecond = Math.floor(second / secondStep) * secondStep;
|
|
return [lowerBoundHour, lowerBoundMinute, lowerBoundSecond];
|
|
}
|
|
|
|
export function getLastDay<DateType>(generateConfig: GenerateConfig<DateType>, date: DateType) {
|
|
const year = generateConfig.getYear(date);
|
|
const month = generateConfig.getMonth(date) + 1;
|
|
const endDate = generateConfig.getEndDate(generateConfig.getFixedDate(`${year}-${month}-01`));
|
|
const lastDay = generateConfig.getDate(endDate);
|
|
const monthShow = month < 10 ? `0${month}` : `${month}`;
|
|
return `${year}-${monthShow}-${lastDay}`;
|
|
}
|