两行代码轻松搞定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页面跳转常用的几种方式
Nov 25 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
Jan 24 Javascript
提取字符串中年月日的函数代码
Nov 05 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
Mar 12 Javascript
jquery移动点击的项目到列表最顶端的方法
Jun 24 Javascript
JavaScript获取ul中li个数的方法
Feb 13 Javascript
jQuery extend()详解及简单实例
May 06 jQuery
JS中mouseup事件丢失的原因与解决办法
Jun 14 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 Javascript
Vue中使用sass实现换肤功能
Sep 07 Javascript
浅谈Webpack核心模块tapable解析
Sep 11 Javascript
如何将Node.js中的回调转换为Promise
Nov 10 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
在JavaScript中调用php程序
2009/03/09 PHP
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
cakephp常见知识点汇总
2017/02/24 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
express express-session的使用小结
2018/12/12 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
在Python中处理时间之clock()方法的使用
2015/05/22 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
Django中的文件的上传的几种方式
2018/07/23 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
Keras loss函数剖析
2020/07/06 Python
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
业绩倒数第一的检讨书
2014/09/24 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
家长会主持词开场白
2015/05/29 职场文书
合作意向书范本
2019/04/17 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server