/*
|
## Date
|
*/
|
var patternLetters = {
|
yyyy: 'getFullYear',
|
yy: function(date) {
|
return ('' + date.getFullYear()).slice(2)
|
},
|
y: 'yy',
|
|
MM: function(date) {
|
var m = date.getMonth() + 1
|
return m < 10 ? '0' + m : m
|
},
|
M: function(date) {
|
return date.getMonth() + 1
|
},
|
|
dd: function(date) {
|
var d = date.getDate()
|
return d < 10 ? '0' + d : d
|
},
|
d: 'getDate',
|
|
HH: function(date) {
|
var h = date.getHours()
|
return h < 10 ? '0' + h : h
|
},
|
H: 'getHours',
|
hh: function(date) {
|
var h = date.getHours() % 12
|
return h < 10 ? '0' + h : h
|
},
|
h: function(date) {
|
return date.getHours() % 12
|
},
|
|
mm: function(date) {
|
var m = date.getMinutes()
|
return m < 10 ? '0' + m : m
|
},
|
m: 'getMinutes',
|
|
ss: function(date) {
|
var s = date.getSeconds()
|
return s < 10 ? '0' + s : s
|
},
|
s: 'getSeconds',
|
|
SS: function(date) {
|
var ms = date.getMilliseconds()
|
return ms < 10 && '00' + ms || ms < 100 && '0' + ms || ms
|
},
|
S: 'getMilliseconds',
|
|
A: function(date) {
|
return date.getHours() < 12 ? 'AM' : 'PM'
|
},
|
a: function(date) {
|
return date.getHours() < 12 ? 'am' : 'pm'
|
},
|
T: 'getTime'
|
}
|
module.exports = {
|
// 日期占位符集合。
|
_patternLetters: patternLetters,
|
// 日期占位符正则。
|
_rformat: new RegExp((function() {
|
var re = []
|
for (var i in patternLetters) re.push(i)
|
return '(' + re.join('|') + ')'
|
})(), 'g'),
|
// 格式化日期。
|
_formatDate: function(date, format) {
|
return format.replace(this._rformat, function creatNewSubString($0, flag) {
|
return typeof patternLetters[flag] === 'function' ? patternLetters[flag](date) :
|
patternLetters[flag] in patternLetters ? creatNewSubString($0, patternLetters[flag]) :
|
date[patternLetters[flag]]()
|
})
|
},
|
// 生成一个随机的 Date 对象。
|
_randomDate: function(min, max) { // min, max
|
min = min === undefined ? new Date(0) : min
|
max = max === undefined ? new Date() : max
|
return new Date(Math.random() * (max.getTime() - min.getTime()))
|
},
|
// 返回一个随机的日期字符串。
|
date: function(format) {
|
format = format || 'yyyy-MM-dd'
|
return this._formatDate(this._randomDate(), format)
|
},
|
// 返回一个随机的时间字符串。
|
time: function(format) {
|
format = format || 'HH:mm:ss'
|
return this._formatDate(this._randomDate(), format)
|
},
|
// 返回一个随机的日期和时间字符串。
|
datetime: function(format) {
|
format = format || 'yyyy-MM-dd HH:mm:ss'
|
return this._formatDate(this._randomDate(), format)
|
},
|
// 返回当前的日期和时间字符串。
|
now: function(unit, format) {
|
// now(unit) now(format)
|
if (arguments.length === 1) {
|
// now(format)
|
if (!/year|month|day|hour|minute|second|week/.test(unit)) {
|
format = unit
|
unit = ''
|
}
|
}
|
unit = (unit || '').toLowerCase()
|
format = format || 'yyyy-MM-dd HH:mm:ss'
|
|
var date = new Date()
|
|
/* jshint -W086 */
|
// 参考自 http://momentjs.cn/docs/#/manipulating/start-of/
|
switch (unit) {
|
case 'year':
|
date.setMonth(0)
|
case 'month':
|
date.setDate(1)
|
case 'week':
|
case 'day':
|
date.setHours(0)
|
case 'hour':
|
date.setMinutes(0)
|
case 'minute':
|
date.setSeconds(0)
|
case 'second':
|
date.setMilliseconds(0)
|
}
|
switch (unit) {
|
case 'week':
|
date.setDate(date.getDate() - date.getDay())
|
}
|
|
return this._formatDate(date, format)
|
}
|
}
|