| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 |
1x
1x
1x
1x
12x
1x
1x
12x
12x
12x
12x
12x
12x
12x
12x
12x
12x
34x
2x
1x
1x
1x
1x
1x
1x
1x
1x
1x
11x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
6x
11x
11x
11x
11x
7x
11x
| /**
* @module libs/lang/formatDate
* @createdAt 2016-07-14
*
* @copyright Copyright (c) 2016 Zhonglei Qiu
* @license Licensed under the MIT license.
*/
var MONTHS = [
['Jan', 'January'],
['Feb', 'February'],
['Mar', 'March'],
['Apr', 'April'],
['May', 'May'],
['Jun', 'June'],
['Jul', 'July'],
['Aug', 'August'],
['Sep', 'September'],
['Oct', 'October'],
['Nov', 'November'],
['Dec', 'December']
]
var WEEKS = [
['Sun', 'Sunday'],
['Mon', 'Monday'],
['Tue', 'Tuesday'],
['Wed', 'Wednesday'],
['Thu', 'Thursday'],
['Fri', 'Friday'],
['Sat', 'Saturday']
]
// 注意,要把长的放前面,表示优先匹配
var gre = /(?:yyyy|yy|mm|m|MM|M|dd|d|DD|Do|D|HH|H|hh|h|A|a|ii|i|ss|s|X|x)/g
/**
* 格式化日期
*
* @param {Date} [date] 要格式化的日期,如果不传则使用当前日期
* @param {String} format 格式字符串,支持如下格式(以 2014-01-02 04:05:06 为例):
*
* FORMAT | EXAMPLE
* --------|----------------
* yyyy | 2014
* yy | 14
* m, mm | 1, 01
* M, MM | Jan, January
* d, dd | 2, 02
* D, DD | Thur, Thursday
* Do | 2nd(Day of month with ordinal: 1st..31st)
* H, HH | 4, 04(24 hour time)
* h, hh | 4, 04 (12 hour time used with `a A`)
* a, A | am, AM
* i, ii | 5, 05
* s, ss | 6, 06
* x | 1388646306
* X | 1388646306346
*
* @return {String} 格式化后的日期
*
* @example
*
* formatDate('yyyy-mm-dd HH:ii:ss')
* // 2016-07-08 15:03:02
* formatDate(new Date(), 'h:ii A')
* // 8:30 AM
*
* @author Zhonglei Qiu
* @since 2.0.0
*/
module.exports = function(date, format) {
if (!format) {
format = date
date = new Date()
}
var year = date.getFullYear()
var month = date.getMonth()
var day = date.getDate()
var week = date.getDay()
var hour = date.getHours()
var minute = date.getMinutes()
var second = date.getSeconds()
var h = hour % 12
var a = hour > 11 ? 'pm' : 'am'
return format.replace(gre, function(key) {
switch (key) {
case 'yyyy': return year
case 'yy': return year.toString().substr(2)
case 'mm': return pad(month + 1)
case 'm': return month + 1
case 'MM': return MONTHS[month][1]
case 'M': return MONTHS[month][0]
case 'dd': return pad(day)
case 'd': return day
case 'DD': return WEEKS[week][1]
case 'D': return WEEKS[week][0]
case 'Do': return order(day)
case 'HH': return pad(hour)
case 'H': return hour
case 'hh': return pad(h)
case 'h': return h
case 'a': return a
case 'A': return a.toUpperCase()
case 'ii': return pad(minute)
case 'i': return minute
case 'ss': return pad(second)
case 's': return second
case 'x': return Math.round(date.getTime() / 1000)
case 'X': return date.getTime()
/* istanbul ignore next 正则是精确匹配,不可能出现下面情况 */
default: return key
}
})
}
function pad(num) {
return num < 10 ? '0' + num : num
}
function order(day) {
var prefix = day.toString()
var suffix = 'th'
var map = {'1': 'st', '2': 'nd', '3': 'rd'}
if (day < 4 || day > 20) {
suffix = map[prefix.toString().slice(-1)] || 'th'
}
return prefix + suffix
}
|