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 相关文章推荐
Javascript之文件操作
Mar 07 Javascript
一个不错的用JavaScript实现的UBB编码函数
Mar 09 Javascript
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
js关闭模态窗口刷新父页面或跳转页面
Dec 13 Javascript
jquery live()调用不存在的解决方法
Feb 26 Javascript
JavaScript中三种异步上传文件方式
Mar 06 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
Sep 05 Javascript
H5移动端图片压缩上传开发流程
Nov 09 Javascript
JavaScript省市级联下拉菜单实例
Feb 14 Javascript
解析vue路由异步组件和懒加载案例
Jun 08 Javascript
vue单元格多列合并的实现
Nov 26 Vue.js
uniapp开发小程序的经验总结
Apr 08 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
php身份证号码检查类实例
2015/06/18 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
Python常用断言函数实例汇总
2020/11/30 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
教师师德教育的自我评价
2013/10/31 职场文书
公司业务主管岗位职责
2013/12/07 职场文书
求职毕业生自荐书
2014/02/08 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
公司授权委托书范本
2014/04/03 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
投诉书范文
2015/07/02 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers