js 时间Date操作 工具类

  1 /*
  2 *javascript 中 Date的工具类,方便string格式的与js时间互转
  3 *主要方法:addDays,addMonths,addYears
  4 */
  5 function runtime(datetime) {
  6     this._millsec = 0;
  7     var _datetime = null;
  8     switch (typeof datetime) {
  9         case 'string':
 10             _datetime = this.strToDate(datetime);
 11             break;
 12         case 'number':
 13         case 'object':
 14             _datetime = new Date(datetime);
 15             break;
 16         default:
 17             _datetime = new Date();
 18             break;
 19     }
 20     this._millsec = _datetime.getTime();
 21     this._synFromMillSec();
 22 }
 23 runtime.prototype._synFromMillSec = function () {
 24     var datetime = new Date(this._millsec);
 25     this.dateTime = datetime;
 26     this.month = datetime.getMonth();
 27     this.year = datetime.getFullYear();
 28     this.dayOfMonth = datetime.getDate();
 29     this.dayOfWeek = datetime.getDay();
 30     this.hours = datetime.getHours();
 31     this.mins = datetime.getMinutes();
 32     this.seconds = datetime.getSeconds();
 33     this.milliSeconds = datetime.getMilliseconds();
 34     this.totalMilliSeconds = this._millsec;
 35 }
 36 
 37 runtime.prototype._synFromNumber = function () {
 38     var datetime = new Date(this.year, this.month, this.dayOfMonth, this.hour, this.mins, this.seconds, this.milliSeconds);
 39     this._millsec = datetime.getMilliseconds();
 40     this.dateTime = datetime;
 41     this.totalMilliSeconds = this._millsec;
 42 }
 43 
 44 //当前时间加毫秒 返回当前实例 [整数]
 45 runtime.prototype.addMilliSeconds = function (ms) {
 46     this._millsec += ms;
 47     this._synFromMillSec();
 48     return this;
 49 }
 50 //当前时间加秒 返回当前实例 [整数]
 51 runtime.prototype.addSeconds = function (sec) {
 52     return this.addMilliSeconds(sec * 1000);
 53 }
 54 //当前时间加分钟 返回当前实例 [整数]
 55 runtime.prototype.addMins = function (mins) {
 56     return this.addMilliSeconds(mins * 60 * 1000);
 57 }
 58 //当前时间加小时 返回当前实例 [整数]
 59 runtime.prototype.addHours = function (hours) {
 60     return this.addMilliSeconds(hours * 60 * 60 * 1000);
 61 }
 62 //当前时间加天 返回当前实例 [整数]
 63 runtime.prototype.addDays = function (days) {
 64     return this.addMilliSeconds(days * 24 * 60 * 60 * 1000);
 65 }
 66 //当前时间加周 返回当前实例 [整数]
 67 runtime.prototype.addWeeks = function (weeks) {
 68     return this.addMilliSeconds(weeks * 7 * 24 * 60 * 60 * 1000);
 69 }
 70 
 71 //当前时间加月 返回当前实例 [整数]
 72 runtime.prototype.addMonths = function (months) {
 73     var tm = months % 12;
 74     var ty = (months - tm) / 12;
 75     var cm = this.month + tm;
 76     if (cm > 11) {
 77         ty++;
 78         cm = cm - 11;
 79     } else if (cm < 0) {
 80         ty--;
 81         cm = cm + 11;
 82     }
 83     this.year += ty;
 84     this.month = cm;
 85     var currMDays = this.monthDays();
 86     if (currMDays < this.dayOfMonth) {
 87         this.dayOfMonth = currMDays;
 88     }
 89     this._synFromNumber();
 90     return this;
 91 }
 92 //当前时间加年 返回当前实例 [整数]
 93 runtime.prototype.addYears = function (years) {
 94     return this.addMonths(years * 12);
 95 }
 96 
 97 //是否是润年
 98 runtime.prototype.isRun = function () {
 99     var pYear = this.year;
100     if ((pYear % 4 == 0 && pYear % 100 != 0) || (pYear % 100 == 0 && pYear % 400 == 0)) {
101         return true;
102     } else {
103         return false;
104     }
105 }
106 //当月天数
107 runtime.prototype.monthDays = function () {
108     switch (this.month + 1) {
109         case 1:
110         case 3:
111         case 5:
112         case 7:
113         case 8:
114         case 10:
115         case 12:
116             return 31;
117         case 2:
118             if (this.isRun())
119                 return 29;
120             return 28;
121         default:
122             return 30;
123     }
124 }
125 //中文星期
126 runtime.prototype.weekToCnName = function () {
127     var show_day = new Array('星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六');
128     return show_day[this.dayOfWeek];
129 }
130 
131 //string 转 Date 如:2012-12-12 01:01:01
132 runtime.prototype.strToDate = function (str) {
133     if (!str)
134         return;
135     var s = str + '';
136     var sp = '';
137     if (s.indexOf('-') > 0) {
138         sp = '-';
139     } else if (s.indexOf('/') > 0) {
140         sp = '/';
141     }
142     else {
143         return;
144     }
145     var year = s.match(new RegExp('[0-9]{4}'))[0];
146     var month = s.match(new RegExp(sp + '[0-9]{1,2}', 'g'))[0].replace(sp + "", '');
147     var day = s.match(new RegExp(sp + '[0-9]{1,2}', 'g'))[1].replace(sp + "", '');
148     var contain_time = s.indexOf(':') > 0;
149     var hour = 0, min = 0, second = 0, ms = 0;
150     if (contain_time) {
151         hour = s.match(new RegExp('[0-9]{2}:', 'g'))[0].replace(/:/g, '');
152         min = s.match(new RegExp('[0-9]{2}:', 'g'))[1].replace(/:/g, '');
153         second = s.match(new RegExp(':[0-9]{2}', 'g'))[1].replace(/:/g, '');
154         ms = s.match(new RegExp('.[0-9]{3}$', 'g'))[0].replace(/./g, '');
155         hour = parseInt(hour);
156         min = parseInt(min);
157         second = parseInt(second);
158         if (ms)
159             ms = parseInt(ms);
160         else
161             ms = 0;
162     }
163     var dt = new Date(parseInt(year), parseInt(month) - 1, parseInt(day), hour, min, second, ms);
164     return dt;
165 }
166 // 深copy当前对象
167 runtime.prototype.clone = function () {
168     return new runtime(this.dateTime);
169 }
170 
171 //转字符串输入 如 fmt=yyyy年MM月dd日cweek
172 runtime.prototype.formatDateString = function (fmt) {
173     var result = fmt || "";
174     result = result.replace(/yyyy/g, this.year)
175         .replace(/yy/g, this.year.toString().substr(2, 2))
176         .replace(/MM/g, (this.month + 1) < 10 ? ('0' + (this.month + 1).toString()) : (this.month + 1))
177         .replace(/M/g, (this.month + 1).toString())
178         .replace(/dd/g, this.dayOfMonth < 10 ? ('0' + this.dayOfMonth) : this.dayOfMonth)
179         .replace(/d/g, this.dayOfMonth)
180         .replace(/HH/g, this.hours < 10 ? ('0' + this.hours) : this.hours)
181         .replace(/H/g, this.hours)
182         .replace(/mm/g, this.mins < 10 ? ('0' + this.mins) : this.mins)
183         .replace(/m/g, this.mins)
184         .replace(/ss/g, this.seconds < 10 ? ('0' + this.seconds) : this.seconds)
185         .replace(/s/g, this.seconds)
186         .replace(/fff/g, this.milliSeconds < 10 ? ('00' + this.milliSeconds) : (this.milliSeconds < 100 ? ('0' + this.milliSeconds) : (this.milliSeconds)))
187         .replace(/ff/g, this.milliSeconds)
188         .replace(/f/g, this.milliSeconds)
189         .replace(/cweek/g, this.weekToCnName());
190     return result;
191 }
192 
193 //转为string
194 runtime.prototype.toString = function () {
195     return this.formatDateString('yyyy/MM/dd HH:mm:ss.fff');
196 }
原文地址:https://www.cnblogs.com/yingheyiwai/p/6655580.html