"use strict";
/**
 * Date工具模块
 * @date 2022-03
 * @author 何华东
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.DateUtils = void 0;
var dayjs = require('dayjs');
/**
 Date工具

 注：字符串转Date时，如果字符串只有日期部分，那么转换后的Date的时间部分为08:00:00(东八区)
 let date = new Date('2016-04-12');
 logger.info(`${date}`);//=>Tue Apr 12 2016 08:00:00 GMT+0800 (中国标准时间)
 logger.info(date);//=>2016-04-12T00:00:00.000Z
 */
var DateUtils = /** @class */ (function () {
    function DateUtils() {
    }
    /**
     * 时间格式化
     * @param date 需要格式化的时间
     * @param format 时间格式字符串，默认为：'YYYY-MM-DD HH:mm:ss'
     * @returns
     */
    DateUtils.format = function (date, format) {
        return dayjs(date).format(format || 'YYYY-MM-DD HH:mm:ss');
    };
    /**
     * 求两个时间相差月份数，只算年月部分
     *
     * 注：结束时间要大于开始时间，否则返回值无效
     * @param dateFrom 开始时间
     * @param dateTo 结束时间
     */
    DateUtils.monthsDiff = function (dateFrom, dateTo) {
        return (dateTo.getFullYear() - dateFrom.getFullYear()) * 12 + dateTo.getMonth() - dateFrom.getMonth();
    };
    /**
     * 求两个时间相差分钟数
     *
     * 注：结束时间要大于开始时间，否则结果为负
     * @param dateFrom 开始时间
     * @param dateTo 结束时间
     */
    DateUtils.minutesDiff = function (dateFrom, dateTo) {
        return (dateTo.getTime() - dateFrom.getTime()) / (1000 * 60);
    };
    /**
     * 求两个时间相差天数
     *
     * 注：结束时间要大于开始时间，否则结果为负
     * @param dateFrom 开始时间
     * @param dateTo 结束时间
     */
    DateUtils.daysDiff = function (dateFrom, dateTo) {
        return (dateTo.getTime() - dateFrom.getTime()) / (1000 * 60 * 60 * 24);
    };
    /**
     * 求两个时间相差秒数
     *
     * 注：结束时间要大于开始时间，否则结果为负
     * @param dateFrom 开始时间
     * @param dateTo 结束时间
     * @returns
     */
    DateUtils.secondsDiff = function (dateFrom, dateTo) {
        return (dateTo.getTime() - dateFrom.getTime()) / 1000;
    };
    /**
     * 对Date的时间部分清零
     * @param date 需要清理的时间
     * @returns
     */
    DateUtils.clearTime = function (date) {
        date.setHours(0);
        date.setMinutes(0);
        date.setSeconds(0);
        date.setMilliseconds(0);
        return date;
    };
    /**
     * 验证时间是否为有效的时间格式
     * @param date 需要验证的时间
     */
    DateUtils.validateDate = function (date) {
        var new_date = new Date(date);
        return new_date.toString() === 'Invalid Date';
    };
    /**
     * 已过期
     */
    DateUtils.validateDateStr = function (dateStr) {
        return this.validateDate(dateStr);
    };
    /**
     * 获取下一个日期的时间
     */
    DateUtils.getNextDate = function (date) {
        var nextDate = new Date(date);
        nextDate.setDate(nextDate.getDate() + 1);
        return nextDate;
    };
    /**
     * 获取前一个日期的时间
     */
    DateUtils.getPrevDate = function (date) {
        var prevDate = new Date(date);
        prevDate.setDate(prevDate.getDate() - 1);
        return prevDate;
    };
    /**
     * 获取当月第一天的时间
     */
    DateUtils.getFirstDayOfMonth = function (date) {
        var firstDayOfMonth = new Date(date);
        firstDayOfMonth.setDate(1);
        return firstDayOfMonth;
    };
    /**
     * 获取当月最后一天的时间
     */
    DateUtils.getLastDayOfMonth = function (date) {
        var lastDayOfMonth = new Date(date);
        lastDayOfMonth.setDate(1);
        lastDayOfMonth.setMonth(lastDayOfMonth.getMonth() + 1);
        lastDayOfMonth.setDate(lastDayOfMonth.getDate() - 1);
        return lastDayOfMonth;
    };
    /**
     * 获取上个月第一天的时间
     */
    DateUtils.getFirstDayOfPrevMonth = function (date) {
        /**
            必须先把日期设为1，再减去一个月
            {
                let date = new Date('2022-3-31 00:00:00');
                date.setMonth(test.getMonth() - 1);
                logger.info(date);//=>2022-03-03 00:00:00
            }
         */
        var firstDayOfPrevMonth = new Date(date);
        firstDayOfPrevMonth.setDate(1);
        firstDayOfPrevMonth.setMonth(firstDayOfPrevMonth.getMonth() - 1);
        return firstDayOfPrevMonth;
    };
    return DateUtils;
}());
exports.DateUtils = DateUtils;
exports.default = DateUtils;
//# sourceMappingURL=DateUtils.js.map