两行代码轻松搞定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 相关文章推荐
jQuery Div中加载其他页面的实现代码
Feb 27 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
Mar 16 Javascript
也说JavaScript中String类的replace函数
Sep 22 Javascript
修改js confirm alert 提示框文字的简单实例
Jun 10 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
JavaScript函数表达式详解及实例
May 05 Javascript
js 显示日期时间的实例(时间过一秒加1)
Oct 25 Javascript
完美解决linux下node.js全局模块找不到的情况
May 16 Javascript
不得不知的ES6小技巧
Jul 28 Javascript
vue+web端仿微信网页版聊天室功能
Apr 30 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
vue watch监控对象的简单方法示例
Jan 07 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
自定义百度分享的分享按钮
2015/03/18 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
用原生js做单页应用
2017/01/17 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
python实现下载指定网址所有图片的方法
2015/08/08 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
现代化办公人员工作的自我评价
2013/10/16 职场文书
升学宴学生答谢词
2015/01/05 职场文书
律政俏佳人观后感
2015/06/09 职场文书
人事任命书范本
2015/09/21 职场文书