前言

此,主要是记录自己平时会常用到的一些Date操作方法封装,以及Date中比较好用的一些方法运用,希望能帮助到你。

学习路径:MDN-Date(MDN上面有详细的介绍属性语法,感兴趣可以点过去看看)

备注:当然外面也有很多成熟好用的日期库(官方推荐moment.js),如果你的项目日期方面使用的比较复杂频繁,就没必要自己去写js了(自己有特殊需求的该写的还得写哈哈)

目录  

1.获取时间戳

2.获取某年的第一天和最后一天的日期

3.获取某年某月的第一天和最后一天的日期

4.从当前时间往后推年份,月份,天数

5.获取某年的所有日期

6.获取某月有多少周

7.当前日期是这个月的第几周

8.获取某年有多少周

9.当前日期是年的第几周

10.根据周数取时间

11.闰年平年判断

12.日期格式化


正文

1.获取时间戳

      //(当前时间时间戳) 返回自 1970-1-1 00:00:00 至今所经过的毫秒数。Date.now();/*** 解析一个表示日期的字符串,并返回从 1970-1-1 00:00:00 所经过的毫秒数。* dateString:2022-10-10,2022-10,2022 都可以*///显式调用:Date.parse(dateString); //*备注: 由于浏览器差异和不一致,强烈建议不要使用Date.parse解析字符串。//隐式调用:new Date(dateString).getTime();console.log(Date.now()); //1652068607028console.log(Date.parse("2022-10-10")); //1652068607028console.log(new Date("2022-10-10 10:00:00").getTime()); //1665367200000

2.获取某年的第一天和最后一天的日期

      var date = new Date();// 某年第一天 2022/1/1 00:00:00console.log(new Date(date.getFullYear(), 0, 1));// 某年最后一天 2022/12/31 00:00:00console.log(new Date(date.getFullYear(), 12, 0));

3.获取某年某月的第一天和最后一天的日期

      //备注:月份位置的传值是从0-11,所以如果时截取的字符串记得要减一,如:2022-10-10var date = new Date();//某月第一天 2022/5/1 00:00:00console.log(new Date(date.getFullYear(), date.getMonth(), 1).toLocaleString());//某月最后天 2022/5/31 00:00:00console.log(new Date(date.getFullYear(), date.getMonth() + 1, 0).toLocaleString());

4.从当前时间往后推年份,月份,天数

    //备注:用Date自带的实例方法去处理不用考虑每个月不同天数,返回的也是时间格式,不用格式转来转去var date= new Date();//2022/5/12 11:36:21 //往后推三年—— +-3date.setFullYear(date.getFullYear()-3);console.log(date.toLocaleString());//2019/5/12 11:35:56//往后推三个月—— +-3var date= new Date();//2022/5/12 11:38:32date.setMonth(date.getMonth()-3);console.log(date.toLocaleString(0));//2022/2/12 11:38:32//往后推三天—— +-3var date= new Date();//2022/5/12 11:38:32date.setDate(date.getDate()-3);console.log(date.toLocaleString(0));//2022/5/9 11:38:32

5.获取某年的所有日期

      function getYear(date) {let o = {};let y = date.getFullYear();// var i = new Date(y, 0, 0);for (let m = 1; m <= 12; m++) {//单独某月的日期for (let d = 1; d <= new Date(y, m, 0).getDate(); d++) {var t = y + "-" + replenish(m) + "-" + replenish(d); //**这种固定死了格式,如果要自定义格式可以用下面注释这种方式// i.setDate(i.getDate() + 1);// var t = i.toLocaleString();//toLocaleString()是方便观察,格式可以用文章下面的格式化方法formatDate()o[m] ? o[m].push(t) : (o[m] = [t]); //初始化}}return o;}function replenish(str) {var len = str.toString().length;return len < 2 ? "0" + str : str;}console.log(getYear(new Date())); //{1:['2022-01-01,...'],2:['2022-02-01...']...}

6.获取某月有多少周

  //当前月的周对象function getCurrentMonthWeek(date) {var y = date.getFullYear();var m = date.getMonth();var w = new Date(y, m, 1).getDay();var o = {},  n = 1;for (let i = 1; i <= new Date(y, m + 1, 0).getDate(); i++) {if (i !== 1&&w === 1) n++;if (w === 7) w = 0;w++;var curDay = new Date(y, m, i); //也可以自己拼接就不用new了o[n] ? o[n].push(curDay) : (o[n] = [curDay]);}return o;}var date = new Date();console.log(getCurrentMonthWeek(new Date('2022-06-01')));//{1:[Wed Jun 01 2022 00:00:00 GMT+0800 (GMT+08:00)...], 2: Array(7), 3: Array(7), 4: Array(7), 5: Array(4)}

7.当前日期是这个月的第几周

    //当前月的周对象 var date = new Date("2022-05-09");var weeks = getCurrentMonthWeek(date);//上面获取月中周数的方法console.log(weeks);var ind = Object.values(weeks).findIndex((x) => ~x.indexOf(date.toLocaleDateString()));console.log(Object.keys(weeks)[ind]); //3

8.获取某年有多少周

/*** 备注:我这里取某年第一周按照,星期四规则取,* 即当前一号小于或等于星期四那么上一年的最后几天属于当前年的第一周内,* 反之当前年前几号时间属于去年的最后一周*/var y = "2020";//**只返回对应年份的周数function getWeek(year) {var dt = new Date(year, 0, 1);var et = new Date(year, 12, 0).getTime(); //最后一天var d = dt.getDay() || 7;var w = d <= 4 ? 1 : 0; //周四在当前年份,那么跨年的那个星期就属于当前年dt.setDate(dt.getDate() + (4 - d)); //当前年第一个周四while (true) {dt.setDate(dt.getDate() + 7); //下一周if (dt.getTime() > et) break;w += 1;}return w;}console.log(getWeek(y)); //53//**返回对应年份周数及对应的日期对象function getWeekNew(year) {var dt = new Date(year, 0, 1);var et = new Date(year, 12, 0).getTime();var d = dt.getDay() || 7;var w = 1;var o = {};//第一周的前一天(进循环会直接++所以取了前一天)if (d <= 4) dt.setDate(dt.getDate() - d);else dt.setDate(dt.getDate() + (7 - d));while (true) {dt.setDate(dt.getDate() + 1); //+1o[w]? o[w].push(dt.toLocaleDateString()) //dt.toLocaleDateString()这里的日期格式可以自己拼接,: (o[w] = [dt.toLocaleDateString()]); //或者使用本文下面的日期格式化方法toLocaleString_Date(dt),//最后一天小于星期四,删除掉不完整的周()if (dt.getTime() === et && (dt.getDay() || 7) < 4) {delete o[w];return o;}//取整周if ((dt.getDay() || 7) == 7) {if (dt.getTime() >= et) return o;w += 1;}}}console.log(getWeekNew(y)); //{1:['2019/12/30', '2019/12/31', '2020/1/1'..],2:[...],...}

9.当前日期是年的第几周

    //当前月的周对象function getCrrut(date) {var year = date.getFullYear();var weeks = getWeekNew(date.getFullYear());//上面的方法var month = date.getMonth();var ind = Object.values(weeks).findIndex((x) => ~x.indexOf(date.toLocaleDateString())//date.toLocaleDateString()这里取时间要跟weeks对象类型相同);if (~ind) return year + "年 第" + (ind + 1) + "周";//下面主要是防止取到年初或者年尾日期且不在当前年的周(weeks)对象内而出现0周的情况if (month < 11) {year -= 1;weeks = getWeekNew(year);ind = Object.values(weeks).findIndex((x) => ~x.indexOf(date.toLocaleDateString()));} else {year += 1;weeks = getWeekNew(year);ind = Object.values(weeks).findIndex((x) => ~x.indexOf(date.toLocaleDateString()));}return year + "年 第" + (ind + 1) + "周";}var date = new Date();console.log(getCrrut(date));

10.根据周数取时间

    //如果想根据周去取时间的话,那就通过 weeks对象去取var weeks = getWeekNew(date.getFullYear());//文本上面的方法//取第12周数据console.log(weeks[12]);//["2010/3/22","2010/3/23"...]

11.闰年平年判断

      var day = new Date();//1.闰年平年判断function getCommonYearsAndLeapYears(date) {try {var year = date.getFullYear();var n = year % 100 != 0 ? 4 : 400;console.log(year);return year % n == 0 ? "闰年" : "平年";} catch (error) {return alert("数据异常");}}//console.log( getCommonYearsAndLeapYears(new Date('2016')));

12.日期格式化

*常规方法(下面还有有一个简单点的处理方法)

      /**稳妥一点的办法  yyyy-MM-dd hh:mm:ss* date:时间* type: yyyy-MM-dd hh:mm:ss* 当然如果有需要的话可以直接绑定到原型上面* Date.prototype.format=formatDate*/function formatDate(date = new Date(), type = "yyyy-MM-dd hh:mm:ss") {if (Object.prototype.toString.call(this) == "[object Date]")date = this;if (date == "Invalid Date")return alert("日期格式有问题");var o = {yyyy: date.getFullYear(), //年MM: date.getMonth() + 1, //月dd: date.getDate(), //日hh: date.getHours(), //24小时制HH: date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, //12小时制mm: date.getMinutes(), //分ss: date.getSeconds(), //秒ms: date.getMilliseconds(), //毫秒};for (var i in o) {type = type.replaceAll(i, replenish(o[i]));}return type;}function replenish(str) {var len = str.toString().length;return len < 2 ? "0" + str : str;}/*** 有需要可以绑定到原型上(多人开发,有可能会命名冲突需要沟通好)* Date.prototype.format=formatDate;* console.log(new Date().format());//2022-05-09 16:37:28* 当作方法使用* console.log(formatDate("yyyy-MM-dd hh:mm:ss"));//2022-05-09 16:24:24*/console.log(formatDate()); //2022-05-09 16:24:24console.log(formatDate(new Date(), "yyyy年MM月dd日 wk"));//2022年05月09日 星期三

*简单使用方法 (如果要考虑兼容底版本浏览器,比如ie9已下之类不建议使用以下方法)

/*** 如果你的需求很简单并且不怎么常用,不妨试试Date自带的方法* 备注:下面的方法不兼容ie9以下的,如果要考虑兼容,可能不太行* Date.prototype.toLocaleDateString() :返回日期字符串 '2022/5/9'* Date.prototype.toLocaleString()  :返回整个日期对象字符串 '2022/5/9 16:43:03'* Date.prototype.toLocaleTimeString()  :返回时间字符串 '16:43:03'*/var date = new Date(); //options 根据属性值显示不同的效果,设置options后会覆盖掉上面三个方法的默认显示,所以我就举toLocaleString一个例子var options = {// weekday: "long",//星期,慎用会影响其他字段的格式year: "numeric", //年month: "2-digit", //月day: "2-digit", //天hour: "numeric", //时hour12: false, //是否12小时制度minute: "numeric", //分second: "numeric", //秒};//显示值就根据options参数决定,不要就注释console.log(date.toLocaleString()); //2022/5/9 16:56:46console.log(date.toLocaleString(undefined, options)); //2022/05/09 16:59:21console.log(date.toLocaleString(undefined, options).replaceAll("/", "-")); //2022-05-09 16:59:21//取消options.weekday的注释,日期后缀会被强制转换console.log(date.toLocaleString(undefined, { ...options, weekday: "long" }));//2022年05月09日星期一 16:57:54// 扩展一下(大写,农历)//  var intl = new Intl.DateTimeFormat('zh-u-nu-hanidec-ca-chinese', options)// console.log(date.toLocaleDateString("zh-u-nu-hanidec", options));//大写 二〇二二/〇五/〇九 一七:一五:四四// console.log(date.toLocaleDateString("zh-u-ca-chinese", options));//农历 2022年四月09 17:15:44// console.log(date.toLocaleDateString('zh-u-nu-hanidec-ca-chinese', options))//大写的农历 二〇二二年四月〇九 一七:一五:四四// console.log(date.toLocaleDateString('zh-u-nu-hanidec-ca-chinese', options))//大写的农历(带星期) 二〇二二壬寅年四月〇九,星期一 一七:四三:三二//使用频繁的话用intl代替上面的调用可以提高性能// var intl = new Intl.DateTimeFormat('zh-u-ca-chinese', options)//2022年四月09 17:46:50// console.log(intl.format(date))

* 方法封装

    var options = {// weekday: "long",//星期,慎用会影响其他字段的格式year: "numeric", //年month: "2-digit", //月day: "2-digit", //天hour: "numeric", //时hour12: false, //是否12小时制度minute: "numeric", //分second: "numeric", //秒};var intl = new Intl.DateTimeFormat(undefined, options); //undefined 取默认语言function toLocaleString_Date(date) {return intl.format(date).replaceAll("/", "-");}console.log(toLocaleString_Date(new Date())); //2022-05-12 11:01:08,不需要时分秒可以自行调节options

对上面options参数感兴趣的点我

后续待补

JavaScript 关于 Date() 时间函数的运用以及方法封装相关推荐

  1. javascript 常用的时间函数

    一.javascript 获得当前时间 <SCRIPT LANGUAGE="JavaScript"> var myDate = new Date(); myDate.g ...

  2. JS的一些时间获取和计算公用方法封装

    又是一个记录博客,不想废话的一天.... 自己之前写的时间计算和日期格式化的源码整理,直接看代码吧~~ /*** 判断年份是否为润年* @param {Number} year* @return {B ...

  3. html关于计时的函数,关于JavaScript获取时间函数及实现倒计时

    关于JavaScript获取时间函数及实现倒计时 JavaScript获取当前时间函数 var time=new Date() 获取时间函数 Date() 返回当日的日期和时间. getDate() ...

  4. 处理时间_7_60个Mysql日期时间函数汇总

    Mysql日期时间函数使用大全 需求描述 需求:列出mysql常见的日期.时间函数的使用方法以及注意事项. 解决方法:通过参考官方手册并验证来完成该需求. 注:1 当前以mysql来演示. 2 详细函 ...

  5. php日期源码,php学习笔记之日期时间函数-PHP源码

    本文章来给各位朋友详细介绍关于在php学日期时间函数的一些用法与参数介绍,php支持的时间函数有很多,例如:getdate().mktime().gmdate()等等,下面我来给大家介绍有兴趣的朋友可 ...

  6. mysql从当前月向前推12_JavaScript获取当前时间向前推三个月的方法示例

    本文实例讲述了JavaScript获取当前时间向前推三个月的方法.分享给大家供大家参考,具体如下: /p> "http://www.w3.org/TR/xhtml1/DTD/xhtml ...

  7. date( 1day ) php,PHP_使用PHP的日期与时间函数技巧,PHP的日期时间函数date() 1,年- - phpStudy...

    使用PHP的日期与时间函数技巧 PHP的日期时间函数date() 1,年-月-日 复制代码 代码如下: echo date('Y-m-j'); 2007-02-6 echo date('y-n-j') ...

  8. oracle 过去毫秒,Oracle date timestamp 毫秒 - 时间函数总结(转)

    yyyy-mm-dd hh24:mi:ss.ff  年-月-日 时:分:秒.毫秒 --上一月,上一年 select add_months(sysdate,-1) last_month,add_mont ...

  9. PHP 中日期时间函数 date() 用法总结

    [导读] date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考.格式化日期date() 函数的第一个参数规定了如何格式化日期 时间.它 ...

最新文章

  1. Java api 入门教程 之 JAVA的IO处理
  2. Smarty中文手册,Smarty教程,Smarty模板的入门教材
  3. R语言droplevels函数删除因子变量(factor)没有用到的级别(level)实战
  4. mysql设置约束l命令_mysql建表约束,sql
  5. open3d python 学习笔记
  6. Android版本的Wannacry文件加密病毒样本分析(附带锁机)
  7. openwrt安装蒲公英_网速不给力?双宽带叠加,立马消除卡顿
  8. Hbase常用操作记录
  9. 字节跳动推“头条搜索”独立APP 安卓端已上线
  10. 电脑工具栏怎么调整到下面_PDF格式的合同怎么盖公章?这不是在为难我胖虎吗?...
  11. 从零手写VIO(三)——LM算法
  12. 阿里巴巴电话面试(遭到了阿里的完虐,被一顿痛批)
  13. php 过滤所有符号,php过滤所有特殊符号
  14. 用简单易懂的话语来快速入门windows缓冲区溢出
  15. vs 搭建团队项目服务器,tfs中如何创建团队项目及如何操作团队项目
  16. 提高软件开发效率的方法
  17. uniapp 原生js实现公历转农历
  18. 联想笔记本一键还原出现 “系统分区结构发生改变,无法进行恢复操作”怎样处理。
  19. 94608000秒,1576800分,26280小时,1095天!!
  20. 如何使得自己说话有底气?

热门文章

  1. C++ 宏定义与空格
  2. 用9张图片,完整的理解三极管的开关功能
  3. AOI检测光学成像标准
  4. C语言编程小练习7(二维数组)
  5. 代号斗罗显示服务器暂未开放,代号斗罗手游预约-代号斗罗手游安卓版预约V1.0_第一手游网...
  6. 软件技巧--手机软件
  7. 37、【华为HCIE-Storage】--Oceanstor 9000概述
  8. MODBUS-RTU和ASCII模式及CRC和LRC校验方法简述
  9. RS-232、RS-485、RS-422通信接口标准介绍
  10. Shopee发布Apple(苹果)品牌限售政策