javascript 日期时间函数(经典+完善+实用)


Posted in Javascript onMay 27, 2009

Date.prototype.isLeapYear 判断闰年
Date.prototype.Format 日期格式化
Date.prototype.DateAdd 日期计算
Date.prototype.DateDiff 比较日期差
Date.prototype.toString 日期转字符串
Date.prototype.toArray 日期分割为数组
Date.prototype.DatePart 取日期的部分信息
Date.prototype.MaxDayOfDate 取日期所在月的最大天数
Date.prototype.WeekNumOfYear 判断日期所在年的第几周
StringToDate 字符串转日期型
IsValidDate 验证日期有效性
CheckDateTime 完整日期时间检查
daysBetween 日期天数差

//--------------------------------------------------- 
// 判断闰年 
//--------------------------------------------------- 
Date.prototype.isLeapYear = function() 
{ 
return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0))); 
} 
//--------------------------------------------------- 
// 日期格式化 
// 格式 YYYY/yyyy/YY/yy 表示年份 
// MM/M 月份 
// W/w 星期 
// dd/DD/d/D 日期 
// hh/HH/h/H 时间 
// mm/m 分钟 
// ss/SS/s/S 秒 
//--------------------------------------------------- 
Date.prototype.Format = function(formatStr) 
{ 
var str = formatStr; 
var Week = ['日','一','二','三','四','五','六']; 
str=str.replace(/yyyy|YYYY/,this.getFullYear()); 
str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100)); 
str=str.replace(/MM/,this.getMonth()>9?this.getMonth().toString():'0' + this.getMonth()); 
str=str.replace(/M/g,this.getMonth()); 
str=str.replace(/w|W/g,Week[this.getDay()]); 
str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate()); 
str=str.replace(/d|D/g,this.getDate()); 
str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours()); 
str=str.replace(/h|H/g,this.getHours()); 
str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes()); 
str=str.replace(/m/g,this.getMinutes()); 
str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds()); 
str=str.replace(/s|S/g,this.getSeconds()); 
return str; 
} 
//+--------------------------------------------------- 
//| 求两个时间的天数差 日期格式为 YYYY-MM-dd 
//+--------------------------------------------------- 
function daysBetween(DateOne,DateTwo) 
{ 
var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-')); 
var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1); 
var OneYear = DateOne.substring(0,DateOne.indexOf ('-')); 
var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-')); 
var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1); 
var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-')); 
var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000); 
return Math.abs(cha); 
} 
//+--------------------------------------------------- 
//| 日期计算 
//+--------------------------------------------------- 
Date.prototype.DateAdd = function(strInterval, Number) { 
var dtTmp = this; 
switch (strInterval) { 
case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number)); 
case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number)); 
case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number)); 
case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number)); 
case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number)); 
case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); 
case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); 
case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); 
} 
} 
//+--------------------------------------------------- 
//| 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串 
//+--------------------------------------------------- 
Date.prototype.DateDiff = function(strInterval, dtEnd) { 
var dtStart = this; 
if (typeof dtEnd == 'string' )//如果是字符串转换为日期型 
{ 
dtEnd = StringToDate(dtEnd); 
} 
switch (strInterval) { 
case 's' :return parseInt((dtEnd - dtStart) / 1000); 
case 'n' :return parseInt((dtEnd - dtStart) / 60000); 
case 'h' :return parseInt((dtEnd - dtStart) / 3600000); 
case 'd' :return parseInt((dtEnd - dtStart) / 86400000); 
case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7)); 
case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1); 
case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear(); 
} 
} 
//+--------------------------------------------------- 
//| 日期输出字符串,重载了系统的toString方法 
//+--------------------------------------------------- 
Date.prototype.toString = function(showWeek) 
{ 
var myDate= this; 
var str = myDate.toLocaleDateString(); 
if (showWeek) 
{ 
var Week = ['日','一','二','三','四','五','六']; 
str += ' 星期' + Week[myDate.getDay()]; 
} 
return str; 
} 
//+--------------------------------------------------- 
//| 日期合法性验证 
//| 格式为:YYYY-MM-DD或YYYY/MM/DD 
//+--------------------------------------------------- 
function IsValidDate(DateStr) 
{ 
var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去两边空格; 
if(sDate=='') return true; 
//如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为'' 
//数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式 
var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,''); 
if (s=='') //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D 
{ 
var t=new Date(sDate.replace(/\-/g,'/')); 
var ar = sDate.split(/[-/:]/); 
if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate()) 
{ 
//alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。'); 
return false; 
} 
} 
else 
{ 
//alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。'); 
return false; 
} 
return true; 
} 
//+--------------------------------------------------- 
//| 日期时间检查 
//| 格式为:YYYY-MM-DD HH:MM:SS 
//+--------------------------------------------------- 
function CheckDateTime(str) 
{ 
var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/; 
var r = str.match(reg); 
if(r==null)return false; 
r[2]=r[2]-1; 
var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]); 
if(d.getFullYear()!=r[1])return false; 
if(d.getMonth()!=r[2])return false; 
if(d.getDate()!=r[3])return false; 
if(d.getHours()!=r[4])return false; 
if(d.getMinutes()!=r[5])return false; 
if(d.getSeconds()!=r[6])return false; 
return true; 
} 
//+--------------------------------------------------- 
//| 把日期分割成数组 
//+--------------------------------------------------- 
Date.prototype.toArray = function() 
{ 
var myDate = this; 
var myArray = Array(); 
myArray[0] = myDate.getFullYear(); 
myArray[1] = myDate.getMonth(); 
myArray[2] = myDate.getDate(); 
myArray[3] = myDate.getHours(); 
myArray[4] = myDate.getMinutes(); 
myArray[5] = myDate.getSeconds(); 
return myArray; 
} 
//+--------------------------------------------------- 
//| 取得日期数据信息 
//| 参数 interval 表示数据类型 
//| y 年 m月 d日 w星期 ww周 h时 n分 s秒 
//+--------------------------------------------------- 
Date.prototype.DatePart = function(interval) 
{ 
var myDate = this; 
var partStr=''; 
var Week = ['日','一','二','三','四','五','六']; 
switch (interval) 
{ 
case 'y' :partStr = myDate.getFullYear();break; 
case 'm' :partStr = myDate.getMonth()+1;break; 
case 'd' :partStr = myDate.getDate();break; 
case 'w' :partStr = Week[myDate.getDay()];break; 
case 'ww' :partStr = myDate.WeekNumOfYear();break; 
case 'h' :partStr = myDate.getHours();break; 
case 'n' :partStr = myDate.getMinutes();break; 
case 's' :partStr = myDate.getSeconds();break; 
} 
return partStr; 
} 
//+--------------------------------------------------- 
//| 取得当前日期所在月的最大天数 
//+--------------------------------------------------- 
Date.prototype.MaxDayOfDate = function() 
{ 
var myDate = this; 
var ary = myDate.toArray(); 
var date1 = (new Date(ary[0],ary[1]+1,1)); 
var date2 = date1.dateAdd(1,'m',1); 
var result = dateDiff(date1.Format('yyyy-MM-dd'),date2.Format('yyyy-MM-dd')); 
return result; 
} 
//+--------------------------------------------------- 
//| 取得当前日期所在周是一年中的第几周 
//+--------------------------------------------------- 
Date.prototype.WeekNumOfYear = function() 
{ 
var myDate = this; 
var ary = myDate.toArray(); 
var year = ary[0]; 
var month = ary[1]+1; 
var day = ary[2]; 
document.write('< script language=VBScript\> \n'); 
document.write('myDate = DateValue(''+month+'-'+day+'-'+year+'') \n'); 
document.write('result = DatePart('ww', myDate) \n'); 
document.write(' \n'); 
return result; 
} 
//+--------------------------------------------------- 
//| 字符串转成日期类型 
//| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd 
//+--------------------------------------------------- 
function StringToDate(DateStr) 
{ 
var converted = Date.parse(DateStr); 
var myDate = new Date(converted); 
if (isNaN(myDate)) 
{ 
//var delimCahar = DateStr.indexOf('/')!=-1?'/':'-'; 
var arys= DateStr.split('-'); 
myDate = new Date(arys[0],--arys[1],arys[2]); 
} 
return myDate; 
}
Javascript 相关文章推荐
优化网页之快速的呈现我们的网页
Jun 29 Javascript
jquery win 7透明弹出层效果的简单代码
Aug 06 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
js通过location.search来获取页面传来的参数
Sep 11 Javascript
JavaScript设计模式之策略模式实例
Oct 10 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 jQuery
深入理解node.js http模块
Jan 24 Javascript
select获取下拉框的值 下拉框默认选中方法
Feb 28 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
Mar 05 Javascript
浅谈Webpack 是如何加载模块的
May 24 Javascript
详解vue项目中使用token的身份验证的简单实践
Mar 08 Javascript
jquery cookie插件代码类
May 26 #Javascript
判断脚本加载是否完成的方法
May 26 #Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
May 26 #Javascript
Javascript Select操作大集合
May 26 #Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 #Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
May 25 #Javascript
jQuery 图像裁剪插件Jcrop的简单使用
May 22 #Javascript
You might like
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
jQuery实现增删改查
2020/12/22 jQuery
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
在Django中创建动态视图的教程
2015/07/15 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
Python中常用的内置方法
2019/01/28 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Python新手学习raise用法
2020/06/03 Python
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
公益活动策划方案
2014/01/09 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
抽奖活动主持词
2014/03/31 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python