JavaScript之Date日期对象扩展的例子

一、前言

  JavaScript Date对象提供了诸多日期相关属性以及操作日期的相关方法,为开发网站带来了许多方便。然而,大部分web页面展示给用户的日期格式可能是这样:yyyy-MM-dd hh:mm:ss(类似于c# java的ToString())。

  不论是JavaScript Date对象的toString()方法,还是JavaScript Date对象的toGMTString()、toISOString()、toLocaleDateString()等方法,都无法转化成我们平时开发中想要的日期字符串格式;同时,关于日期相加减运算访求的封装,JavaScript Date对象也提供;那么,问题来了,我们平时编码过程中需要进行日期相关运算的时候,该怎么办呢?最佳途径就是,自己动手封装平时经常用到的日期处理函数,下面的代码就是本人在开发过程中封装的一些简单而用实用的日期处理函数。在未来的开发过程中,我会不断的完善、扩展及优化这些日期处理函数。

二、代码

 //名称:日期加法函数
 //参数:part(year、month、day、hour、minute、second、millisecond)
 //返回:Date对象
 Date.prototype.add = function (part, value) {
     if (!value || isNaN(value)) value = 0;
     switch (part) {
         case "year":
             this.setFullYear(this.getFullYear() + value);
             break;
         case "month":
             this.setMonth(this.getMonth() + value);
             break;
         case "day":
             this.setDate(this.getDate() + value);
             break;
         case "hour":
             this.setHours(this.getHours() + value);
             break;
         case "minute":
             this.setMinutes(this.getMinutes() + value);
             break;
         case "second":
             this.setSeconds(this.getSeconds() + value);
             break;
         case "millisecond":
             this.setMilliseconds(this.getMilliseconds() + value);
             break;
         default:
     }
     return this;
 };
 
 Date.prototype.addYears = function (value) {
     if (!value || isNaN(value)) value = 0;
     this.setFullYear(this.getFullYear() + value);
     return this;
 };
 
 Date.prototype.addMonths = function (value) {
     if (!value || isNaN(value)) value = 0;
     this.setMonth(this.getMonth() + value);
     return this;
 };
 
 Date.prototype.addDays = function (value) {
     if (!value || isNaN(value)) value = 0;
     this.setDate(this.getDate() + value);
     return this;
 };
 
 Date.prototype.addHours = function (value) {
     if (!value || isNaN(value)) value = 0;
     this.setHours(this.getHours() + value);
     return this;
 };
 
 Date.prototype.addMinutes = function (value) {
     if (!value || isNaN(value)) value = 0;
     this.setMinutes(this.getMinutes() + value);
     return this;
 };
 
 Date.prototype.addSeconds = function (value) {
     if (!value || isNaN(value)) value = 0;
     this.setSeconds(this.getSeconds() + value);
     return this;
 };
 
 Date.prototype.addMilliseconds = function (value) {
     if (!value || isNaN(value)) value = 0;
     this.setMilliseconds(this.getMilliseconds() + value);
     return this;
 };
 
 //名称:日期加法函数
 //参数:time(日期字符串,示例:12:00:00)
 //返回:Date对象
 Date.prototype.addTime = function (time) {
     var timeRegex = /^([0-1]?\d|2[0-3])(:[0-5]?\d){1,2}$/g;
     if (timeRegex.test(time)) {
         var value = Date.parse("1970/1/1 " + time) - Date.parse("1970/1/1");
         this.setMilliseconds(this.getMilliseconds() + value);
     }
     return this;
 };
 
 //名称:日期格式化函数
 //参数:format(示例:yyyy-MM-dd hh:mm:ss)、zeroize(是否补零)
 //返回:日期字符串
 Date.prototype.toCustomString = function (format, zeroize) {
     if (!zeroize) zeroize = false;
     var dy = this.getFullYear();
     var dM = this.getMonth() + 1;
     var dd = this.getDate();
     var dh = this.getHours();
     var dm = this.getMinutes();
     var ds = this.getSeconds();
     var dS = this.getMilliseconds();
     var orm = {
         "y+": dy.toString(),
         "M+": !zeroize ? dM.toString() : dM < 10 ? '0' + dM : dM.toString(),
         "d+": !zeroize ? dd.toString() : dd < 10 ? '0' + dd : dd.toString(),
         "h+": !zeroize ? dh.toString() : dh < 10 ? '0' + dh : dh.toString(),
         "m+": !zeroize ? dm.toString() : dm < 10 ? '0' + dm : dm.toString(),
         "s+": !zeroize ? ds.toString() : ds < 10 ? '0' + ds : ds.toString(),
         "S": dS.toString()
     };
     for (var i in orm) {
         var patt = new RegExp(i);
         if (patt.test(format)) {
             var item = orm[i];
             var ms = format.match(patt);
             var result = ms[0];
             if (i === "S") {
                 format = format.replace(result, item);
             } else {
                 format = format.replace(result, item.substr(item.length - result.length));
             }
         }
     }
     return format;
 };
View Code
三、分析
1.add函数:此函数的第一个参数提供了日期需要进行运算的部分(year、month、day、hour、minute、second、millisecond),返回日期对象;

2.add##函数:类似于addYear、addMonth、addDays等函数,即是对add函数的分解,为日期处理提供了更为方便快捷的功能;

3.addTime函数:此函数提供了日期对象类型与时间字符串类型运算的功能,time参数为时间字符串(示例:10:00:00);

4.toCustomString函数:此函数提供了日期对象类型转化成指定格式的日期字符串,format为日期格式化字符串参数(示例:yyyy-MM-dd hh:mm:ss);

以下示例中,示例1、示例2演示了add函数、add##函数的使用;示例3演示了addTime函数的使用。

三个示例中均用到toCustomString函数对结果进行格式化输出。

 //示例1:d1数据类型为整形,日期毫秒数
 var d1 = Date.now();
 var ret1 = new Date(d1).add("year", 2);//或者:var ret1 = new Date(d1).addYear(2);           
 console.log(ret1.toCustomString("yyyy-MM-dd hh:mm:ss"));
 //打印:2018-3-28 19:15:45
 
 //示例2:d2数据类型为字符串型,日期字符串
 var d2 = "2016-1-1 12:00:00";
 var ret2 = new Date(Date.parse(d2)).add("day", 10);//或者:var ret2 = new Date(Date.parse(d2)).addDays(10);           
 console.log(ret2.toCustomString("yyyy/MM/dd hh时mm分ss秒", true));
 //打印:2016/01/11 12时00分00秒
 
 //示例3:日期类型与时间字符串类型的运算
 var ret3 = new Date(Date.now()).addTime("2:10:00");
 console.log(ret3.toCustomString("yyyy-MM-dd hh:mm:ss", true));
 //打印:2016-03-28 21:25:45

看个例子 Date对象时间格式化功能的小例子

Date.prototype.format =function(format)
{
    var o = {
            "M+" : this.getMonth()+1, //month
            "d+" : this.getDate(), //day
            "h+" : this.getHours(), //hour
            "m+" : this.getMinutes(), //minute
            "s+" : this.getSeconds(), //second
            "q+" : Math.floor((this.getMonth()+3)/3), //quarter
            "S" : this.getMilliseconds() //millisecond
    };
    if(/(y+)/.test(format))
    {   
        format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4- RegExp.$1.length));
    }
    for(var k in o)
    {
        if(new RegExp("("+ k +")").test(format))
        {
            format = format.replace(RegExp.$1,RegExp.$1.length==1? o[k] :("00"+ o[k]).substr((""+ o[k]).length));
        }
    }
    return format;
};

调用方法如下:

var dt = new Date();
var nowDate = dt.format("yyyy-MM-dd hh:mm:ss");

就能得到当前的时间:2013-12-02 14:02:11

 

时间: 2024-09-29 23:14:10

JavaScript之Date日期对象扩展的例子的相关文章

javascript转换日期字符串为Date日期对象的方法_javascript技巧

本文实例讲述了javascript转换日期字符串为Date日期对象的方法.分享给大家供大家参考.具体如下: 这里实现把一个日期字符串如"2014-4-28 12:31:45"转换为Date对象: 方法一: 复制代码 代码如下: var strArray=str.split(" "); var strDate=strArray[0].split("-"); var strTime=strArray[1].split(":");

Javascript格式化指定日期对象的方法

  这篇文章主要介绍了javascript格式化指定日期对象的方法,涉及javascript针对日期对象操作的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了javascript格式化指定日期对象的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 /* * 格式化Date对象为:"2015-04-17 10:20:00" * var dateObj = new Date(); */ function formartDate(dateObj)

javascript格式化指定日期对象的方法_javascript技巧

本文实例讲述了javascript格式化指定日期对象的方法.分享给大家供大家参考.具体如下: /* * 格式化Date对象为:"2015-04-17 10:20:00" * var dateObj = new Date(); */ function formartDate(dateObj){ var updatetimeval =dateObj.getFullYear()+"-"+(dateObj.getMonth()+1)+"-" +dateO

详解JavaScript的内置对象_javascript技巧

什么是对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方法:能够在对象上执行的动作.例如,表单的"提交"(Submit),时间的"获取"(getYear)等: JavaScript 提供多个内建对象,比如 String.Date.Array 等等,使用对象前先定义,如下使用数组对象: var objectName =new Ar

Javascript 日期对象Date扩展方法_时间日期

今天在网上摘抄了些js中操作日期的相关方法,现在与大家分享一下. 复制代码 代码如下: <script type="text/javascript"> Date.prototype.Format = function(fmt) { //author: meizz var o = { "M+" : this.getMonth() + 1, //月份 "d+" : this.getDate(), //日 "h+" :

浅谈JavaScript Date日期和时间对象_基础知识

Date 日期和时间对象 1. 介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new Date() :返回当前的本地日期和时间 参数:无 返回值: {Date} 返回一个表示本地日期和时间的Date对象. 示例: 复制代码 代码如下: var dt = new Date(); console.log(dt); // => 返回一个表示本地日期和时间的Date对象 2.2 new Date(milliseconds) :把毫秒数转

javascript日期时间格式化的例子详解

经常遇到要对时间戳进行格式化,但基本上都是临时需要随时写,从未整理过,今天又遇到对时间戳进行格式化,于是记载下来,以后需要直接拿过来用. 废话不多说,先把各种格式化方法贴给大家 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); /

javascript日期对象格式化为字符串的实现方法

 本篇文章主要是对javascript日期对象格式化为字符串的实现方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 javascript提供的日期格式化太简单,一般应用都需要自己实现格式化方法.下面是我想出的一个格式化处理方案,应该是可以满足常用的需求.日期模板中可以使用任意分隔符,还可以使用文字作为分隔符,甚至支持类似yyyyMMdd之类没有分隔符的格式化.    原理:用正则表达式将日期模板中的日期元素[如yyyy, MM, dd]和分隔符拆分成数组,然后用实际的值替换日期

javascript日期对象格式化为字符串的实现方法_javascript技巧

javascript提供的日期格式化太简单,一般应用都需要自己实现格式化方法.下面是我想出的一个格式化处理方案,应该是可以满足常用的需求.日期模板中可以使用任意分隔符,还可以使用文字作为分隔符,甚至支持类似yyyyMMdd之类没有分隔符的格式化. 原理:用正则表达式将日期模板中的日期元素[如yyyy, MM, dd]和分隔符拆分成数组,然后用实际的值替换日期元素形成日期字符串. 实现共有两个函数,粘贴可运行. 扩展方式: 示例中只支持了年月日时分秒毫秒的元素,如果需要显示星期则可以在values