两行代码轻松搞定JavaScript日期验证


Posted in Javascript onAugust 03, 2016

我们通常在 JavaScript 中验证日期,基本的思路大概是,先判断年月日是否有效,再判断当月是否有当日,比如一些月份没有 31 日,平年二月没有 29、30 日,闰年二月没有 30 日等等。 

偶然间发现一个技巧,能判断以上所有的情况。除去赋值代码,实际代码仅两行。 

其实这个技巧也很简单,通过实例化 Date 对象来生成一个合法的日期,再去对比年月日是否相等,以验证日期是否合法。 

var originalYear = 2016;
var originalMonth = 12;
var originalDay = 32;
var date = new Date(originalYear, originalMonth - 1, originalDay);
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
console.log(year + '-' + month + '-' + day); // 2017-1-1

因为 12 月没有 32 日,所以输出的日期就是第二年的 1 月 1 日,年月日不相等,所以 2016 年 12 月 32 日不是一个合法的日期。 

具体的实现代码:

var validateDate = function (originalYear, originalMonth, originalDay) {
 var date = new Date(originalYear, originalMonth - 1, originalDay);
 var year = date.getFullYear();
 var month = date.getMonth() + 1;
 var day = date.getDate();
 return year == originalYear && month == originalMonth && day == originalDay;
}

测试: 

console.log(validateDate()); // false
console.log(validateDate(-1, -1, -1)); // false
console.log(validateDate('', '', '')); // false
console.log(validateDate([], [], [])); // false
console.log(validateDate({}, {}, {})); // false

// 平年二月。
console.log(validateDate(2015, 2, 29)); // false
// 闰年二月。
console.log(validateDate(2016, 2, 29)); // true
console.log(validateDate(2016, 6, 30)); // true
console.log(validateDate(2016, 6, 31)); // false
console.log(validateDate('2016', '01', '01')); // true

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js原型链原理看图说明
Jul 07 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
ajax请求data遇到的问题分析
Jan 18 Javascript
详解JavaScript中typeof与instanceof用法
Oct 24 Javascript
JS异步处理的进化史深入讲解
Aug 25 Javascript
js回溯法计算最佳旅行线路代码实例
Sep 11 Javascript
JS实现简易留言板特效
Dec 23 Javascript
微信小程序地图绘制线段并且测量(实例代码)
Jan 02 Javascript
ES6学习笔记之let与const用法实例分析
Jan 22 Javascript
JS实现图片懒加载(lazyload)过程详解
Apr 02 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
Highcharts学习之数据列
Aug 03 #Javascript
JavaScript中日期函数的相关操作知识
Aug 03 #Javascript
JS实现的表格行上下移动操作示例
Aug 03 #Javascript
基于jQuery实现淡入淡出效果轮播图
Jul 31 #Javascript
JS使用正则表达式实现关键字替换加粗功能示例
Aug 03 #Javascript
Angular2内置指令NgFor和NgIf详解
Aug 03 #Javascript
JS简单实现点击复制链接的方法
Aug 03 #Javascript
You might like
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
jQuery 使用手册(三)
2009/09/23 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
如何搜索查找并解决Django相关的问题
2014/06/30 Python
详解python的ORM中Pony用法
2018/02/09 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
python的slice notation的特殊用法详解
2019/12/27 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
优秀学生干部个人的自我评价
2013/10/04 职场文书
入党介绍人评语
2014/05/06 职场文书
实名检举信范文
2015/03/02 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
javascript函数式编程基础
2021/09/15 Javascript