javascript中神奇的 Date对象小结


Posted in Javascript onOctober 12, 2017

Date 对象算是较常用的对象之一,但很多人完全不会操作,就算一些简单的操作也用 moment 而不自己尝试一下。

本次分享下 Date 中的 date 使用技巧,希望能给大家启发。

MDN官网介绍

setDate() 方法根据本地时间来指定一个日期对象的天数。

如果 dayValue 超出了月份的合理范围,setDate 将会相应地更新 Date 对象。

例如,如果为 dayValue 指定0,那么日期就会被设置为上个月的最后一天。

获取月份天数

// 获取月份天数
function getMonthDayCount(year, month) {
 return new Date(year, month, 0).getDate();
}
console.log(getMonthDayCount(2017, 10)); // 31

Date 第三个参数的本质跟 setDate 是一样的。

因为 date 为 0 时自动退到上个月的最后一天,所以这里月份也不需要减,正好的。

获取所有月份天数

function getAllMonthDayCount(year) {
 var days = [31, new Date(year, 2, 0).getDate(), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
 return days;
}
console.log(getAllMonthDayCount(2016));// [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

这个算是上面的延伸,不多解释。

是否是闰年

function isLeapYear(year) {
 return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0);
}

这是网上的代码,相信大多数人都用。

但其实你真的理解或者能记住么?

反正我不能。。

function isLeapYear(year) {
 return new Date(year, 2, 0).getDate() === 29;
}
console.log([
 isLeapYear(2000),
 isLeapYear(2016),
 isLeapYear(2017),
 isLeapYear(2018)
]); // [ true, true, false, false ]

这样看,是不是就非常简单容易理解了。

而且都不需要记,是不是想忘都忘不了?

天数加减操作

之前看到有人用相对秒数在计算几天前或几天后,甚至还在算跨月,跨年的情况。

其实直接 setDate 就好了,自动处理 跨月,跨年 的情况。

// 10天后是几月几号
var dt = new Date('2016-12-25');
dt.setDate(dt.getDate() + 10);
console.log(dt.toLocaleDateString()); // 2017/1/4


// 10天前是几月几号
var dt = new Date('2017-01-04');
dt.setDate(dt.getDate() - 10);
console.log(dt.toLocaleDateString()); // 2016/12/25

小结

虽然这些东西很基础,说方法名,可能大家都知道,但很多人却依然不会去使用。

就跟用 jq 却依然 for 循环处理结果一样。

这里只列举了部分例子,也许会有其他神奇的操作技巧等你去发现。

Javascript 相关文章推荐
自己的js工具_Form 封装
Aug 21 Javascript
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
新手常遇到的一些jquery问题整理
Aug 16 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 Javascript
跟我学习javascript的for循环和for...in循环
Nov 18 Javascript
form表单转Json提交的方法(推荐)
Sep 23 Javascript
javascript trie前缀树的示例
Jan 29 Javascript
vue项目打包后打开页面空白解决办法
Jun 29 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
Jul 23 Javascript
AngularJS自定义表单验证功能实例详解
Aug 24 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 #Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 #Javascript
js实现单张图片平移切换效果
Oct 11 #Javascript
jQuery自动或手动图片切换效果
Oct 11 #jQuery
简单实现vue验证码60秒倒计时功能
Oct 11 #Javascript
mui框架移动开发初体验详解
Oct 11 #Javascript
Scala解析Json字符串的实例详解
Oct 11 #Javascript
You might like
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
js表单登陆验证示例
2016/10/19 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
网上蛋糕店创业计划书
2014/01/24 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
文言文辞职信
2015/02/28 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
行政上诉状范文
2015/05/23 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android