分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

通过js date对象获取各种开始结束日期的示例

发布时间:2023-09-06 02:25责任编辑:熊小新关键词:js

有时候做一些任务计划的功能时候,需要提供一个开始时间或者结束时间,比如本周结束,本月结束,今天结束等等,因此,我参考网上的资料把相关的实现为一个项目:

  • gitee: https://gitee.com/dhclly/icedog.date-edge
  • github: https://github.com/DHclly/icedog.date-edge/tree/master

执行测试用例,可以得到下面这种形式的结果:

当前的时间: 2018-12-10 14:38:09昨天的开始日期: 2018-12-9 00:00:00昨天的结束日期: 2018-12-10 00:00:00今天的开始日期: 2018-12-10 00:00:00今天的结束日期: 2018-12-11 00:00:00明天的开始日期: 2018-12-11 00:00:00明天的结束日期: 2018-12-12 00:00:00上周的开始日期(星期一为一周开始): 2018-12-3 00:00:00上周的结束日期(星期一为一周开始): 2018-12-10 00:00:00本周的开始日期(星期一为一周开始): 2018-12-10 00:00:00本周的结束日期(星期一为一周开始): 2018-12-17 00:00:00下周的开始日期(星期一为一周开始): 2018-12-17 00:00:00下周的开始日期(星期一为一周开始): 2018-12-24 00:00:00上周的开始日期(星期日为一周开始): 2018-12-2 00:00:00上周的结束日期(星期日为一周开始): 2018-12-9 00:00:00本周的开始日期(星期日为一周开始): 2018-12-9 00:00:00本周的结束日期(星期日为一周开始): 2018-12-16 00:00:00下周的开始日期(星期日为一周开始): 2018-12-16 00:00:00下周的开始日期(星期日为一周开始): 2018-12-23 00:00:00上月的开始日期: 2018-11-1 00:00:00上月的结束日期: 2018-12-1 00:00:00本月的开始日期: 2018-12-1 00:00:00本月的结束日期: 2019-01-1 00:00:00下月的开始日期: 2019-01-1 00:00:00下月的结束日期: 2019-02-1 00:00:00去年的开始日期: 2017-01-1 00:00:00去年的结束日期: 2018-01-1 00:00:00今年的开始日期: 2018-01-1 00:00:00今年的结束日期: 2019-01-1 00:00:00明年的开始日期: 2019-01-1 00:00:00明年的结束日期: 2020-01-1 00:00:00

源码:

/** * 获取默认的日期格式化配置 */function getDefaultDateFormatConfig() { ???var defaultFormatConfig = { ???????/** 年月日的分隔符 */ ???????separator: "-", ???????/** 是否显示毫秒 */ ???????showMillisecond: false, ???????/** 是否填充0 */ ???????isFillZero: true, ???} ???return defaultFormatConfig;}/** * 填充 0 ?* @param {number} num ?*/function fillZero(num) { ???return (num > 10 ? "" : "0") + num;}/** * 简单的继承实现 * @param {object} obj 继承的对象 * @param {object} extendObj 被继承的对象 */function extend(obj, extendObj) { ???for (key in extendObj) { ???????if (extendObj.hasOwnProperty(key)) { ???????????obj[key] = extendObj[key]; ???????} ???} ???return obj;}/** * 格式化日期对象为字符串,如:1992-1-5 00:00:00 * @param {Date} date 日期对象 * @param {object} config 配置对象,支持参数参考defaultFormatConfig */function formatDate(date, config) { ???var defaultConfig = this.defaultConfig; ???var config = extend(defaultConfig, config); ???var separator = config.separator; ???var showMillisecond = config.showMillisecond; ???var isFillZero = config.isFillZero; ???var year = date.getFullYear(); ???var month = (date.getMonth() + 1); ???var day = date.getDate(); ???var hour = date.getHours(); ???var minute = date.getMinutes(); ???var second = date.getSeconds(); ???var millisecond = date.getMilliseconds(); ???if (isFillZero) { ???????month = fillZero(month); ???????date = fillZero(day); ???????hour = fillZero(hour); ???????minute = fillZero(minute); ???????second = fillZero(second); ???} ???var formatStr = year + separator + month + separator + day + " " + hour + ":" + minute + ":" + second; ???if (showMillisecond) { ???????formatStr += "." + millisecond; ???} ???return formatStr;}/** * 获取一个时分秒毫秒的值都是00的日期对象 * @param {number} fullYear 年份 如 2018 * @param {number} month 月 以0开始 * @param {number} day 日 */function getDateWithFillHMSSZero(fullYear, month, day) { ???var date = new Date(); ???if (fullYear) { ???????date.setFullYear(fullYear); ???} ???if (month) { ???????date.setMonth(month); ???} ???if (day) { ???????date.setDate(day); ???} ???date.setHours(0); ???date.setMinutes(0); ???date.setSeconds(0); ???date.setMilliseconds(0); ???return date;}module.exports = { ???formatDate: formatDate, ???defaultConfig: getDefaultDateFormatConfig(), ???/** ????* 获取当前的日期 ????*/ ???getNowDate: function () { ???????var date = new Date(); ???????return date; ???}, ???/** ???* 获取昨天的开始日期 ???*/ ???getYesterdayBegin: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setDate(date.getDate() - 1); ???????return date; ???}, ???/** ????* 获取昨天的结束日期 ????*/ ???getYesterdayEnd: function () { ???????return this.getTodayBegin(); ???}, ???/** ????* 获取今天的开始日期 ????*/ ???getTodayBegin: function () { ???????var date = getDateWithFillHMSSZero(); ???????return date; ???}, ???/** ????* 获取今天的结束日期 ????*/ ???getTodayEnd: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setDate(date.getDate() + 1); ???????return date; ???}, ???/** ???* 获取明天的开始日期 ???*/ ???getTomorrowBegin: function () { ???????return this.getTodayEnd(); ???}, ???/** ????* 获取明天的结束日期 ????*/ ???getTomorrowEnd: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setDate(date.getDate() + 2); ???????return date; ???}, ???/** ????* 获取上周的开始日期 ????* @param {boolean} isStartByMonday 是否以本周星期一的 00:00:00 刻为开始日期,默认true,如果是false,则以本周星期日的 00:00:00 刻为开始日期 ????*/ ???getLastWeekBegin: function (isStartByMonday) { ???????if (isStartByMonday === undefined || isStartByMonday === null) { ???????????isStartByMonday = true; ???????} ???????var date = getDateWithFillHMSSZero(); ???????//现在通常的做法(也是国际惯例),是把星期日作为一周的开始,而星期六则是周末 ???????//这里的day表示天,星期用 dayOfWeek 表示 ???????var day = date.getDate(); ???????var dayOfWeek = date.getDay();//星期日的值是0 ???????var dayValue = 0; ???????if (isStartByMonday) { ???????????//如果以星期一为开始,那么星期天应该是7 ???????????if (dayOfWeek === 0) { ???????????????dayOfWeek = 7; ???????????} ???????????dayValue = day - dayOfWeek + 1 - 7; ???????} else { ???????????dayValue = day - dayOfWeek - 7; ???????} ???????date.setDate(dayValue); ???????return date; ???}, ???/** ????* 获取上周的结束日期 ????* @param {boolean} isStartByMonday 是否以下周星期一的 00:00:00 刻为开始日期,默认true,如果是false,则以下周星期日的 00:00:00 刻为开始日期 ????*/ ???getLastWeekEnd: function (isStartByMonday) { ???????return this.getThisWeekBegin(isStartByMonday); ???}, ???/** ????* 获取本周的开始日期 ????* @param {boolean} isStartByMonday 是否以本周星期一的 00:00:00 刻为开始日期,默认true,如果是false,则以本周星期日的 00:00:00 刻为开始日期 ????*/ ???getThisWeekBegin: function (isStartByMonday) { ???????if (isStartByMonday === undefined || isStartByMonday === null) { ???????????isStartByMonday = true; ???????} ???????var date = getDateWithFillHMSSZero(); ???????//现在通常的做法(也是国际惯例),是把星期日作为一周的开始,而星期六则是周末 ???????//这里的day表示天,星期用 dayOfWeek 表示 ???????var day = date.getDate(); ???????var dayOfWeek = date.getDay();//星期日的值是0 ???????var dayValue = 0; ???????if (isStartByMonday) { ???????????//如果以星期一为开始,那么星期天应该是7 ???????????if (dayOfWeek === 0) { ???????????????dayOfWeek = 7; ???????????} ???????????dayValue = day - dayOfWeek + 1; ???????} else { ???????????dayValue = day - dayOfWeek; ???????} ???????date.setDate(dayValue); ???????return date; ???}, ???/** ????* 获取本周的结束日期 ????* @param {boolean} isStartByMonday 是否以下周星期一的 00:00:00 刻为开始日期,默认true,如果是false,则以下周星期日的 00:00:00 刻为开始日期 ????*/ ???getThisWeekEnd: function (isStartByMonday) { ???????if (isStartByMonday === undefined || isStartByMonday === null) { ???????????isStartByMonday = true; ???????} ???????var date = getDateWithFillHMSSZero(); ???????//现在通常的做法(也是国际惯例),是把星期日作为一周的开始,而星期六则是周末 ???????//这里的day表示天,星期用 dayOfWeek 表示 ???????var day = date.getDate(); ???????var dayOfWeek = date.getDay();//星期日的值是0 ???????var dayValue = 0; ???????if (isStartByMonday) { ???????????//如果以星期一为开始,那么星期天应该是7 ???????????if (dayOfWeek === 0) { ???????????????dayOfWeek = 7; ???????????} ???????????dayValue = day + (7 - dayOfWeek) + 1; ???????} else { ???????????dayValue = day + (7 - dayOfWeek); ???????} ???????date.setDate(dayValue); ???????return date; ???}, ???/** ????* 获取下周的开始日期 ????* @param {boolean} isStartByMonday 是否以本周星期一的 00:00:00 刻为开始日期,默认true,如果是false,则以本周星期日的 00:00:00 刻为开始日期 ????*/ ???getNextWeekBegin: function (isStartByMonday) { ???????return this.getThisWeekEnd(isStartByMonday); ???}, ???/** ????* 获取下周的结束日期 ????* @param {boolean} isStartByMonday 是否以下周星期一的 00:00:00 刻为开始日期,默认true,如果是false,则以下周星期日的 00:00:00 刻为开始日期 ????*/ ???getNextWeekEnd: function (isStartByMonday) { ???????if (isStartByMonday === undefined || isStartByMonday === null) { ???????????isStartByMonday = true; ???????} ???????var date = getDateWithFillHMSSZero(); ???????//现在通常的做法(也是国际惯例),是把星期日作为一周的开始,而星期六则是周末 ???????//这里的day表示天,星期用 dayOfWeek 表示 ???????var day = date.getDate(); ???????var dayOfWeek = date.getDay();//星期日的值是0 ???????var dayValue = 0; ???????if (isStartByMonday) { ???????????//如果以星期一为开始,那么星期天应该是7 ???????????if (dayOfWeek === 0) { ???????????????dayOfWeek = 7; ???????????} ???????????dayValue = day + (7 - dayOfWeek) + 1 + 7; ???????} else { ???????????dayValue = day + (7 - dayOfWeek) + 7; ???????} ???????date.setDate(dayValue); ???????return date; ???}, ???/** ????* 获取上月的开始日期 ????*/ ???getLastMonthBegin: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setMonth(date.getMonth() - 1); ???????date.setDate(1)//设置天为1 ???????return date; ???}, ???/** ????* 获取上月的结束日期 ????*/ ???getLastMonthEnd: function () { ???????return this.getThisMonthBegin(); ???}, ???/** * 获取本月的开始日期 */ ???getThisMonthBegin: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setDate(1)//设置天为1 ???????return date; ???}, ???/** ????* 获取本月的结束日期 ????*/ ???getThisMonthEnd: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setMonth(date.getMonth() + 1); ???????date.setDate(1)//设置天为1 ???????return date; ???}, ???/** ????* 获取下月的开始日期 ????*/ ???getNextMonthBegin: function () { ???????return this.getThisMonthEnd(); ???}, ???/** ????* 获取下月的结束日期 ????*/ ???getNextMonthEnd: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setMonth(date.getMonth() + 2); ???????date.setDate(1)//设置天为1 ???????return date; ???}, ???/** ????* 获取去年的开始日期 ????*/ ???getLastYearBegin: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setFullYear(date.getFullYear() - 1); ???????date.setMonth(0);//月是从0开始算 ???????date.setDate(1); ???????return date; ???}, ???/** ????* 获取去年的结束日期 ????*/ ???getLastYearEnd: function () { ???????return this.getThisYearBegin(); ???}, ???/** ????* 获取今年的开始日期 ????*/ ???getThisYearBegin: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setMonth(0);//月是从0开始算 ???????date.setDate(1); ???????return date; ???}, ???/** ????* 获取今年的结束日期 ????*/ ???getThisYearEnd: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setFullYear(date.getFullYear() + 1); ???????date.setMonth(0);//月是从0开始算 ???????date.setDate(1); ???????return date; ???}, ???/** ????* 获取明年的开始日期 ????*/ ???getNextYearBegin: function () { ???????return this.getThisYearEnd(); ???}, ???/** ????* 获取明年的结束日期 ????*/ ???getNextYearEnd: function () { ???????var date = getDateWithFillHMSSZero(); ???????date.setFullYear(date.getFullYear() + 2); ???????date.setMonth(0);//月是从0开始算 ???????date.setDate(1); ???????return date; ???}}

通过js date对象获取各种开始结束日期的示例

原文地址:https://www.cnblogs.com/DHclly/p/10097013.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved