UNPKG

zui

Version:

一个基于 Bootstrap 深度定制开源前端实践方案,帮助你快速构建现代跨屏应用。

248 lines (215 loc) 6.4 kB
/* ======================================================================== * ZUI: date.js * Date polyfills * http://zui.sexy * ======================================================================== * Copyright (c) 2014 cnezsoft.com; Licensed MIT * ======================================================================== */ (function() { 'use strict'; /** * Ticks of a whole day * @type {number} */ Date.ONEDAY_TICKS = 24 * 3600 * 1000; /** * Format date to a string * * @param string format * @return string */ if(!Date.prototype.format) { Date.prototype.format = function(format) { var date = { 'M+': this.getMonth() + 1, 'd+': this.getDate(), 'h+': this.getHours(), 'm+': this.getMinutes(), 's+': this.getSeconds(), 'q+': Math.floor((this.getMonth() + 3) / 3), 'S+': this.getMilliseconds() }; if(/(y+)/i.test(format)) { format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)); } for(var k in date) { if(new RegExp('(' + k + ')').test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ('00' + date[k]).substr(('' + date[k]).length)); } } return format; }; } /** * Add milliseconds to the date * @param {number} value */ if(!Date.prototype.addMilliseconds) { Date.prototype.addMilliseconds = function(value) { this.setTime(this.getTime() + value); return this; }; } /** * Add days to the date * @param {number} days */ if(!Date.prototype.addDays) { Date.prototype.addDays = function(days) { this.addMilliseconds(days * Date.ONEDAY_TICKS); return this; }; } /** * Clone a new date instane from the date * @return {Date} */ if(!Date.prototype.clone) { Date.prototype.clone = function() { var date = new Date(); date.setTime(this.getTime()); return date; }; } /** * Judge the year is in a leap year * @param {integer} year * @return {Boolean} */ if(!Date.isLeapYear) { Date.isLeapYear = function(year) { return(((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)); }; } if(!Date.getDaysInMonth) { /** * Get days number of the date * @param {integer} year * @param {integer} month * @return {integer} */ Date.getDaysInMonth = function(year, month) { return [31, (Date.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; }; } /** * Judge the date is in a leap year * @return {Boolean} */ if(!Date.prototype.isLeapYear) { Date.prototype.isLeapYear = function() { return Date.isLeapYear(this.getFullYear()); }; } /** * Clear time part of the date * @return {date} */ if(!Date.prototype.clearTime) { Date.prototype.clearTime = function() { this.setHours(0); this.setMinutes(0); this.setSeconds(0); this.setMilliseconds(0); return this; }; } /** * Get days of this month of the date * @return {integer} */ if(!Date.prototype.getDaysInMonth) { Date.prototype.getDaysInMonth = function() { return Date.getDaysInMonth(this.getFullYear(), this.getMonth()); }; } /** * Add months to the date * @param {date} value */ if(!Date.prototype.addMonths) { Date.prototype.addMonths = function(value) { var n = this.getDate(); this.setDate(1); this.setMonth(this.getMonth() + value); this.setDate(Math.min(n, this.getDaysInMonth())); return this; }; } /** * Get last week day of the date * @param {integer} day * @return {date} */ if(!Date.prototype.getLastWeekday) { Date.prototype.getLastWeekday = function(day) { day = day || 1; var d = this.clone(); while(d.getDay() != day) { d.addDays(-1); } d.clearTime(); return d; }; } /** * Judge the date is same day as another date * @param {date} date * @return {Boolean} */ if(!Date.prototype.isSameDay) { Date.prototype.isSameDay = function(date) { return date.toDateString() === this.toDateString(); }; } /** * Judge the date is in same week as another date * @param {date} date * @return {Boolean} */ if(!Date.prototype.isSameWeek) { Date.prototype.isSameWeek = function(date) { var weekStart = this.getLastWeekday(); var weekEnd = weekStart.clone().addDays(7); return date >= weekStart && date < weekEnd; }; } /** * Judge the date is in same year as another date * @param {date} date * @return {Boolean} */ if(!Date.prototype.isSameYear) { Date.prototype.isSameYear = function(date) { return this.getFullYear() === date.getFullYear(); }; } /** * Create an date instance with string, timestamp or date instance * @param {Date|String|Number} date * @return {Date} */ if (!Date.create) { Date.create = function(date) { if (!(date instanceof Date)) { if (typeof date === 'number' && date < 10000000000) { date *= 1000; } date = new Date(date); } return date; }; } if (!Date.timestamp) { Date.timestamp = function(date) { if (typeof date === 'number') { if (date < 10000000000) { date *= 1000; } } else { date = Date.create(date).getTime(); } return date; }; } }());