两行代码轻松搞定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 相关文章推荐
解密效果
Jun 23 Javascript
Flash对联广告的关闭按钮讨论
Jan 30 Javascript
javascript iframe内的函数调用实现方法
Jul 19 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 Javascript
针对初学者的jQuery入门指南
Aug 15 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
详解JavaScript中的属性和特性
Dec 08 Javascript
JSONP跨域请求
Mar 02 Javascript
原生js实现选项卡功能
Mar 08 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 Javascript
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中获取url与物理路径的总结
2013/06/21 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
破解Session cookie的方法
2006/07/28 Javascript
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
JavaScript中this详解
2015/09/01 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
vue封装swiper代码实例解析
2019/10/08 Javascript
Python list操作用法总结
2015/11/10 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
python操作文件的参数整理
2019/06/11 Python
Python实现动态循环输出文字功能
2020/05/07 Python
python collections模块的使用
2020/10/16 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
药店主任岗位责任制
2014/02/10 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
PHP遍历数组的6种方式总结
2021/11/17 PHP
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL