两行代码轻松搞定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 相关文章推荐
JavaScript中的作用域链和闭包
Jun 30 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 Javascript
js简单实现删除记录时的提示效果
Dec 05 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 Javascript
javascript 产生随机数的几种方法总结
Sep 26 Javascript
vue.js获得当前元素的文字信息方法
Mar 09 Javascript
vue加载完成后的回调函数方法
Sep 07 Javascript
微信小程序如何获取用户头像和昵称
Sep 23 Javascript
vue+openlayers绘制省市边界线
Dec 24 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网站在线人数统计
2008/04/09 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
python求最大值最小值方法总结
2019/06/25 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
亿企通软件测试面试题
2012/04/10 面试题
应届毕业生求职信范例分享
2013/12/17 职场文书
家具商场的活动方案
2014/08/16 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
暑假打工感想
2015/08/07 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏
MySQL添加索引特点及优化问题
2022/07/23 MySQL