解决全网90%以上的日期格式转换、日期序列等骚操作问题

简介: 解决全网90%以上的日期格式转换、日期序列等骚操作问题


计算某日期到某日期相差天数

parseInt(Math.abs(new Date('1988-07-11') - new Date('2023-07-11')) / (1000*60*60*24))

计算某日期到某日期相差月份数

function getDiffMonths(startDate, endDate) {
    //startDate、endDate的格式可以为“yyyy/MM/dd”、“yyyy-MM-dd”、“yyyy年MM月dd日”或Date();
    //返回日期的数组 如 ['2021/07/10','2021/07/11']
    let sd = new Date(startDate), sy = sd.getFullYear(), sm = sd.getMonth() + 1, sms = sy * 12 + sm,ed = new Date(endDate), ey = ed.getFullYear(), em = ed.getMonth() + 1, ems = ey * 12 + em;
    return Math.abs(ems - sms);
}
console.log(getDiffMonths('1988-07-11','2023-07-11'))

//计算两个日期之间相差几个月
function getDisMonths(startDate, endDate) {
    startDate = new Date(startDate).toLocaleString("zh-Hans-CN", {year: "numeric", month: "2-digit", day: "2-digit"}).split("/");
    endDate = new Date(endDate).toLocaleString("zh-Hans-CN", {year: "numeric", month: "2-digit", day: "2-digit"}).split("/");
    var year1 = parseInt(startDate[0]),
        month1 = parseInt(startDate[1]),
        year2 = parseInt(endDate[0]),
        month2 = parseInt(endDate[1]),
        months = Math.abs(year2 - year1) * 12 + Math.abs(month2 - month1);
    return months;
}
console.log(getDisMonths(new Date(2020, 5), new Date(2021, 7)));//14
// 当前日期转换为:yyyy/MM/dd HH:mm:ss(24小时制)________________________
new Date().toLocaleString("zh-Hans-CN", {dateStyle: "short", timeStyle: "medium", hour12: false});
// 当前日期转换为:yyyy/MM/dd 上午/下午HH:mm:ss(12小时制)________________________
new Date().toLocaleString("zh-Hans-CN", {dateStyle: "short", timeStyle: "medium"});
// 当前日期转换为:yyyy-MM-dd HH:mm:ss(24小时制 双位数)年月日时分秒________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "2-digit", day: "2-digit", hour12: false, hour: "2-digit", minute: "2-digit", second: "2-digit"}).replace(/\//g, "-");
// 当前日期转换为:yyyyMMddHHmmss(24小时制 双位数)年月日时分秒________________________
new Date().toLocaleString("zh-Hans-CN", { year: "numeric", month: "2-digit", day: "2-digit", hour12: false, hour: "2-digit", minute: "2-digit", second: "2-digit" }).replace(/[\/ :]/g, "");
// 当前日期转换为:yyyy-MM-dd________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "2-digit", day: "2-digit"}).replace(/\//g, "-");
// 当前日期转换为:HH:mm:ss(24小时制 双位数)________________________
new Date().toLocaleString("zh-Hans-CN", {hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false});
// 当前日期转换为:HH:mm(24小时制 双位数)________________________
new Date().toLocaleString("zh-Hans-CN", {hour: "2-digit", minute: "2-digit", hour12: false});
// 当前日期转换为:公元yyyy年MM月dd日星期D HH:mm:ss(24小时制)________________________
new Date().toLocaleString("zh-Hans-CN", {era:'short',year: "numeric", month: "short", day: "numeric", weekday: "long", hour: "numeric", minute: "numeric", second: "numeric", hour12: false});
// 当前日期转换为:yyyy年MM月dd日星期D HH:mm:ss(24小时制)________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "short", day: "numeric", weekday: "long", hour: "numeric", minute: "numeric", second: "numeric", hour12: false});
// 当前日期转换为:yyyy年MM月dd日周D HH:mm:ss(24小时制)________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "short", day: "numeric", weekday: "short", hour: "numeric", minute: "numeric", second: "numeric", hour12: false});
// 当前日期转换为:yyyy年MM月dd日D HH:mm:ss(24小时制)________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "short", day: "numeric", weekday: "narrow", hour: "numeric", minute: "numeric", second: "numeric", hour12: false});
// 当前日期转换为:yyyy年MM月dd日星期D HH:mm:ss(24小时制)________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "short", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", hour12: false});
// 当前日期转换为:yyyy年MM月dd日星期D________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "short", day: "numeric", weekday: "long"});
// 当前日期转换为:yyyy年MM月dd日周D________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "short", day: "numeric", weekday: "short"});
// 当前日期转换为:yyyy年MM月dd日D________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "short", day: "numeric", weekday: "narrow"});
// 当前日期转换为:yyyy年MM月dd日________________________
new Date().toLocaleString("zh-Hans-CN", {year: "numeric", month: "short", day: "numeric"});
//部分笨拙的方法________________________
var yearMonthDay = new Date().getFullYear() + ("0" + (new Date().getMonth() + 1)).slice(-2) + ("0" + new Date().getDate()).slice(-2);//yyyyMMdd
var year_Month_Day = new Date().getFullYear() + "-" + ("0" + (new Date().getMonth() + 1)).slice(-2) + "-" + ("0" + new Date().getDate()).slice(-2);//yyyy-MM-dd
//部分笨拙的方法(ES6)________________________
var yearMonthDay = new Date().getFullYear() + (new Date().getMonth() + 1).toString().padStart(2, 0) + (new Date().getDate()).toString().padStart(2, 0);//yyyyMMdd
var year_Month_Day = new Date().getFullYear() + "-" + (new Date().getMonth() + 1).toString().padStart(2, 0) + "-" + (new Date().getDate()).toString().padStart(2, 0);//yyyy-MM-dd
//当月第一天、当月最后一天年月日(yyyy-MM-dd)________________________
new Date(new Date().getFullYear(),new Date().getMonth(),1).toLocaleString("zh-Hans-CN", {year: "numeric", month: "2-digit", day: "2-digit"}).replace(/\//g, "-");
new Date(new Date().getFullYear(),new Date().getMonth()+1,0).toLocaleString("zh-Hans-CN", {year: "numeric", month: "2-digit", day: "2-digit"}).replace(/\//g, "-");
/**日期方法大合集*/
var date = {
        //新方法(时:分:秒)
        HH_mm_ss(date = null) {
            return new Date(date).toLocaleString("zh-Hans-CN", { hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false });
        },
        //新方法(年-月-日)
        yyyy_MM_dd(date = null) {
            return new Date(date).toLocaleString("zh-Hans-CN", { year: "numeric", month: "2-digit", day: "2-digit" }).replace(/\//g, "-");
        },
        //新方法(年-月-日 时:分:秒)
        yyyy_MM_dd_HH_mm_ss(date = null) {
            return new Date(date).toLocaleString("zh-Hans-CN", { year: "numeric", month: "2-digit", day: "2-digit", hour12: false, hour: "2-digit", minute: "2-digit", second: "2-digit" }).replace(/\//g, "-");
        },
    yearMonthDay: function () {
        return new Date().getFullYear() + ("0" + (new Date().getMonth() + 1)).slice(-2) + ("0" + new Date().getDate()).slice(-2);
    }, year_Month_Day: function () {
        return new Date().getFullYear() + "-" + ("0" + (new Date().getMonth() + 1)).slice(-2) + "-" + ("0" + new Date().getDate()).slice(-2);
    }, yMd: function (dt, split) {
        dt || (dt = new Date());
        split || (split = "-");
        return dt.getFullYear() + split + ("0" + (dt.getMonth() + 1)).slice(-2) + split + ("0" + dt.getDate()).slice(-2);
    },
    /**判断是否逾期*/
    over: function (endDate, isEqual) {
        var d1 = new Date().getTime(), d2 = new Date(endDate).getTime();
        return isEqual ? d1 >= d2 : d1 > d2;
    },
    /**比较日期大小,前一个日期大于(isEqual=true时 比较大于等于)后一个日期时返回true*/
    compare: function (d1, d2, isEqual) {
        d1 = new Date(d1).getTime(), d2 = new Date(d2).getTime();
        return isEqual ? d1 >= d2 : d1 > d2;
    },
    /**获取指定日期之前/之后的某天*/
    pointDate: function (dt, n) {
        if (!n) return dt;
        var s = "/";
        if (dt.indexOf("-") > -1) {
            s = "-", dt = dt.replace(/-/g, "/");
        } else if (dt.indexOf(".") > -1) {
            s = ".", dt = dt.replace(/\./g, "/");
        }
        var d = new Date(dt), lw = new Date(Number(d) + 1000 * 60 * 60 * 24 * Math.floor(n)), /*n天数*/ ly = lw.getFullYear(), lm = lw.getMonth() + 1, ld = lw.getDate(), sd = ly + s + (lm < 10 ? "0" + lm : lm) + s + (ld < 10 ? "0" + ld : ld);
        return sd;
    },
    /**获得当前日期之前之后任意天的日期*/
    anyDate: function (n) {
        var dt = new Date();
        dt.setDate(dt.getDate() + n);
        return this.yMd(dt);
    },
    /**获得当前日期之前之后任意天的日期+时间*/
    anyDateTime: function (n) {
        var dt = new Date();
        dt.setDate(dt.getDate() + n);
        return formatDateTime(dt);
    },
    /**获得任意天的日期时间戳:n为负数就是过去的天数,正数则为未来的天数*/
    anyDateTimeStamp: function (n) {
        return new Date(date.anyDate(n) + " 00:00:00").getTime();
    },
    /**获得本月的开始日期、结束日期*/
    monthStartOrEndDate: function (isStart) {
        var now = new Date(), m = now.getMonth(), y = now.getFullYear(), msd = new Date(y, m, Boolean(isStart) ? 1 : new Date(y, m + 1, 0).getDate());
        return date.yMd(msd);
    },
    /**获得本周的开始日期、结束日期*/
    weekStartOrEndDate: function (isStart) {
        var now = new Date(), d = now.getDay(), nd = now.getDate(), m = now.getMonth(), y = now.getFullYear(), wsd = new Date(y, m, nd + (Boolean(isStart) ? -d : 6 - d));
        return date.yMd(wsd);
    },
    /**计算指定日期加上多少天、加多少月、加多少年的日期*/
    add: function (type, number, date) {
        var d = date ? (date instanceof Date ? date : new Date(date)) : new Date();
        switch (type) {
            case "y":
                d.setFullYear(d.getFullYear() + number);
                return d;
            case "q":
                d.setMonth(d.getMonth() + number * 3);
                return d;
            case "m":
                d.setMonth(d.getMonth() + number);
                return d;
            case "w":
                d.setDate(d.getDate() + number * 7);
                return d;
            case "d":
                d.setDate(d.getDate() + number);
                return d;
            case "h":
                d.setHours(d.getHours() + number);
                return d;
            case "m":
                d.setMinutes(d.getMinutes() + number);
                return d;
            case "s":
                d.setSeconds(d.getSeconds() + number);
                return d;
            default:
                d.setDate(d.getDate() + number);
                return d;
        }
        /*/!* 加2天.*!/ alert(date.add("d ", 2).toLocaleString()) /!* 加2月.*!/ alert(date.add("m ", 2).toLocaleString()) /!* 加2年*!/ alert(date.add("y ", 2).toLocaleString());*/
    },
    format: function (date, fmt) {
        date = date instanceof Date ? date : new Date(date);
        var o = {
            "M+": date.getMonth() + 1,
            "d+": date.getDate(),
            "h+": date.getHours() % 12 == 0 ? 12 : date.getHours() % 12,
            "H+": date.getHours(),
            "m+": date.getMinutes(),
            "s+": date.getSeconds(),
            "q+": Math.floor((date.getMonth() + 3) / 3),
            "S": date.getMilliseconds()
        };
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
        if (/(E+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "星期" : "周") : "") + "日一二三四五六".charAt(date.getDay()));
        }
        for (var k in o) {
            if (new RegExp("(" + k + ")").test(fmt)) {
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
            }
        }
        return fmt;
    },
    /**格式化日期:yyyy-MM-dd HH:mm:ss */
    formatDate: function (timeStamp) {
        return date.format(timeStamp ? (timeStamp instanceof Date ? timeStamp : new Date(timeStamp)) : new Date(), "yyyy-MM-dd");
    },
    /**格式化日期:yyyy-MM-dd HH:mm:ss */
    formatDateTime: function (timeStamp) {
        return date.format(timeStamp ? (timeStamp instanceof Date ? timeStamp : new Date(timeStamp)) : new Date(), "yyyy-MM-dd HH:mm:ss");
    },
    /**格式化日期:yyyy年MM月dd日 HH:mm:ss */
    formatToyyyyMMddHHmmssEE: function (timeStamp) {
        return date.format(timeStamp ? (timeStamp instanceof Date ? timeStamp : new Date(timeStamp)) : new Date(), "yyyy年MM月dd日 HH:mm:ss EE");
    }, getDay: function () {
        return "星期" + "日一二三四五六".charAt(new Date().getDay());
    },
    /**转换Date为24小时计时时间格式*/
    to24hours: function (date) {
        var now = date ? (date instanceof Date ? date : new Date(date)) : new Date(), now = now.toLocaleTimeString("zh-Hans-CN", {hour12: false}), now = now.substr(0, now.lastIndexOf(":"));
        return now;
    },
    /**将秒数量转换为时分秒字符串*/
    toHourMinuteSecond: function (second, data) {
        var t = "",
            s = Math.round(second),
            d = data.isDoubleDigits,//显示双位数
            hz = data.hideZero,//隐藏为0的时间单位
            hh = data.hideHour,//隐藏小时
            hm = data.hideMinute,//隐藏分钟
            hs = data.hideSecond;//隐藏秒钟
        if (s > 0) {
            var hour = Math.floor(s / 3600), min = Math.floor(s / 60) % 60, sec = s % 60;
            hh || (hz && !hour) || (d && hour < 10 && (t += "0"), t += hour + "时");
            hm || (hz && !min) || (d && min < 10 && (t += "0"), t += min + "分");
            hs || (hz && !sec) || (d && sec < 10 && (t += "0"), t += sec + "秒");
        }
        return t;
        //测试用例
        /*alert(toHourMinuteSecond(3661,{
            // isDoubleDigits:true,
            hideZero:true,
            // hideHour:true,
            // hideMinute:true,
            // hideSecond:true,
        }));*/
    },
    /**获取最近几个月的年月份*/
    getRecentSeveralMonth: function (n) {
        var date = new Date();
        var nearMonth = [];
        for (var i = 1; i <= n; i++) {
            date.setMonth(date.getMonth() - 1);
            nearMonth.unshift(date.getFullYear() + "/" + (date.getMonth() + 1));
        }
        return nearMonth;
    },
    /**把时间转换为分钟数*/
    hourMinuteToMinute: function (timeString) {
        timeString = timeString.replace(/:/g, ":").replace(/\ |\ /g, "").replace(/::/g, ":").split(":");
        return parseInt(timeString[0] * 60) + parseInt(timeString[1]);
    },
    /**显示几分钟前刚刚发布文章*/
    timeAgo: function (timeStamp) {
        var minute = 1000 * 60, hour = minute * 60, day = hour * 24, week = day * 7, month = day * 30, now = new Date().getTime(), diffValue = now - timeStamp;
        var minC = diffValue / minute, hourC = diffValue / hour, dayC = diffValue / day, weekC = diffValue / week, monthC = diffValue / month, res;
        if (monthC > 3 && monthC < 12) {
            res = "半年前";
        } else if (monthC >= 1 && monthC <= 3) {
            res = parseInt(monthC) + "月前";
        } else if (weekC >= 1 && weekC < 4) {
            res = parseInt(weekC) + "周前";
        } else if (dayC >= 1 && dayC < 7) {
            res = parseInt(dayC) + "天前";
        } else if (hourC >= 1 && hourC < 24) {
            res = parseInt(hourC) + "小时前";
        } else if (minC >= 1 && minC < 60) {
            res = parseInt(minC) + "分钟前";
        } else if (diffValue >= 0 && diffValue <= minute) {
            res = "刚刚";
        } else {
            res = this.formatDateTime(timeStamp);
        }
        return res;
    }, between: function (startDate, endDate) {
        startDate = startDate instanceof Date ? startDate : new Date(startDate);
        endDate = endDate instanceof Date ? endDate : new Date(endDate);
        var today = new Date().getTime(), startDate = new Date(startDate).getTime(), endDate = new Date(endDate).getTime();
        return startDate < today && today < endDate;
    },
    /**计算两个日期相差天数*/
    getDayBetween: function (startDate, endDate) {
        return Math.floor(this.getMillisecondBetween(startDate, endDate)/ 86400000);
    },
    /**计算两个日期相差毫秒数*/
    getMillisecondBetween: function (startDate, endDate) {
        startDate = startDate instanceof Date ? startDate : new Date(startDate);
        endDate = endDate instanceof Date ? endDate : new Date(endDate);
        return Math.abs(Date.parse(endDate) - Date.parse(startDate));
    }
};
//获取周一的日期
getMonday() {
        var day = new Date().getDay(); //获取时间的星期数
        var time = new Date().setDate(new Date().getDate() - (day ? day - 1 : 6)); //获取minus天前的日期
        return new Date(time).toLocaleString("zh-Hans-CN", {year: "numeric", month: "2-digit", day: "2-digit"}) + " 00:00:00";
    },
//获取周五的日期
getFriday() {
        var day = new Date().getDay(); //获取时间的星期数
        var time = new Date().setDate(new Date().getDate() + (day ? 5 - day : -2)); //获取minus天前的日期
        return new Date(time).toLocaleString("zh-Hans-CN", {year: "numeric", month: "2-digit", day: "2-digit"}) + " 00:00:00";
    },
//获取周日的日期
getSunday(index) {
        var day = new Date().getDay(); //获取时间的星期数
        var time = new Date().setDate(new Date().getDate() + (index * 7) + (day ? 7 - day : 0)); //获取minus天前的日期
        return new Date(time).toLocaleString("zh-Hans-CN", {
          year: "numeric",
          month: "2-digit",
          day: "2-digit"
        }).replace(/\//g, '-');
    },

【年月日】、【年月】日期序列前往此处↓

image.png


相关文章
|
4月前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
394 0
|
4月前
|
前端开发 UED 开发者
无障碍设计的魔法:JSF让每个用户都能畅游数字世界!
【8月更文挑战第31天】本文介绍如何使用JavaServer Faces (JSF)构建无障碍Web应用,确保所有用户都能访问和使用。文章通过实际代码示例展示了如何利用ARIA属性增强组件、实现键盘导航、提供文本替代以及使用语义化标签等技术。无障碍设计不仅是道德责任,也是提升用户体验的关键。通过这些方法,JSF可以帮助开发者创建更加公平和包容的应用。
38 0
|
4月前
|
前端开发 数据处理 数据库
Angular与Firebase的完美联合:掌握实时数据同步技术——从环境配置到数据服务的详细实现指南
【8月更文挑战第31天】在现代Web应用中,实时数据同步对于提升用户体验至关重要。本文档详细介绍如何在Angular应用中集成Firebase实时数据库,包括准备工作、配置环境、实现实时数据同步及在组件中使用数据服务等步骤。通过本教程,开发者将掌握利用Angular与Firebase高效实现数据同步的方法,增强应用的实时互动性。
44 0
|
4月前
|
数据处理 开发者
深入解析Angular服务:构建可重用业务逻辑的最佳实践与模式——从基础创建到高级异步处理的全面指南
【8月更文挑战第31天】在Angular开发中,服务用于封装可重用的业务逻辑,有助于保持代码的DRY原则。本文详细介绍如何创建和使用服务,包括基础设置、逻辑封装及高级应用,如HTTP请求和异步数据处理,帮助你构建模块化、易维护的应用。通过示例展示,你将学会如何充分利用服务提升开发效率。
47 0
|
5月前
|
设计模式 JavaScript 测试技术
Angular服务与依赖注入机制详解
【7月更文挑战第17天】Angular的服务与依赖注入机制为构建模块化、可维护和可扩展的应用程序提供了强大的支持。通过合理定义和使用服务,以及利用依赖注入来管理依赖关系,我们可以编写出更加清晰、可维护和可测试的代码。希望本文能帮助你更好地理解和应用Angular的服务与依赖注入机制。
|
5月前
|
前端开发 JavaScript
前端框架与库 - Angular基础:组件、模板、服务
【7月更文挑战第16天】Angular,谷歌维护的前端框架,专注构建动态Web应用。组件是核心,包含行为逻辑的类、定义视图的模板和样式。模板语法含插值、属性和事件绑定。服务提供业务逻辑,依赖注入实现共享。常见问题涉及组件通信、性能和服务注入。优化通信、性能并正确管理服务范围,能提升应用效率和质量。学习组件、模板和服务基础,打造高效Angular应用。
70 1
|
7月前
【请求后台接口】30秒完成Angular10精简版HttpClient请求服务搭建
【请求后台接口】30秒完成Angular10精简版HttpClient请求服务搭建
【请求后台接口】30秒完成Angular10精简版HttpClient请求服务搭建
|
API
Angular 2.x折腾记 :(3)初步了解服务及使用
不探究高深理论,只探究实际使用,有更好的写法或者经验请指出; 有些暂时没涉及到的知识我可能会顺着例子解释;
150 0
|
JavaScript 前端开发 API
Angular 自定义服务 notification
比如,我们这篇文章要讲到的 notification 的实现。
Angular 自定义服务 notification
|
4月前
|
API 开发者 UED
PrimeFaces:JSF的魔法衣橱,解锁UI设计的无限可能!
【8月更文挑战第31天】本文介绍如何结合 JSF(JavaServer Faces)和 PrimeFaces 构建美观且功能强大的现代用户界面。PrimeFaces 提供丰富的 UI 组件库,包括按钮、输入框、数据网格等,支持现代 Web 标准,简化界面开发。文章通过具体示例展示如何使用 `&lt;p:inputText&gt;` 和 `&lt;p:calendar&gt;` 等组件创建用户表单,并用 `&lt;p:dataTable&gt;` 展示数据集合,提升 JSF 应用的易用性和开发效率。
69 0