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 相关文章推荐
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
Jul 06 Javascript
浏览器打开层自动缓慢展开收缩实例代码
Jul 04 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
js与css实现弹出层覆盖整个页面的方法
Dec 13 Javascript
assert()函数用法总结(推荐)
Jan 25 Javascript
Vue 仿百度搜索功能实现代码
Feb 16 Javascript
jQuery中map函数的两种方式
Apr 07 jQuery
Angular指令之restict匹配模式的详解
Jul 27 Javascript
axios取消请求的实践记录分享
Sep 26 Javascript
vue中轮训器的使用
Jan 27 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
Nov 16 Javascript
如何实现vue的tree组件
Dec 03 Vue.js
详解使用路由延迟加载 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设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
bootstrap table插件动态加载表头
2019/07/19 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
Python松散正则表达式用法分析
2016/04/29 Python
python自带的http模块详解
2016/11/06 Python
python实现点对点聊天程序
2018/07/28 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
浅析Python requests 模块
2020/10/09 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
大学毕业典礼演讲稿
2014/09/09 职场文书
初中运动会前导词
2015/07/20 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python