@librecoder/tools
Version:

78 lines (75 loc) • 2.04 kB
JavaScript
/**
* 格式化日期为指定格式的字符串
* @param d 日期对象
* @param fmt 格式化模式
* @returns {*} 日期字格式化符串
*/
export function formatDate(d, fmt) {
var o = {
"M+": d.getMonth() + 1, //月份
"d+": d.getDate(), //日
"h+": d.getHours() == 12 ? 12 : d.getHours() % 12, //小时
"H+": d.getHours(), //小时
"m+": d.getMinutes(), //分
"s+": d.getSeconds(), //秒
"q+": Math.floor((d.getMonth() + 3) / 3), //季度
"S+": d.getMilliseconds(), //毫秒
"t+": d.getHours() < 12 ? 'am' : 'pm',
"T+": d.getHours() < 12 ? 'AM' : 'PM'
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1,
(d.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(-RegExp.$1.length)));
}
}
return fmt;
};
/**
* 按格式解析文件为日期,由于Date.parse作为基础方法已存在,方法名使用`deformat`
* @param s 日期字符串
* @param fmt 格式化模式
* @returns {Date} 日期对象
*/
export function parseDate(s, fmt) {
if (typeof s === 'number') return new Date(s);
if (!fmt) return new Date(Date.parse(s));
var d = {
y: {reg: /y+/g},
M: {reg: /M+/g},
d: {reg: /d+/g},
H: {reg: /H+/g},
h: {reg: /h+/g},
m: {reg: /m+/g},
s: {reg: /s+/g},
S: {reg: /S+/g}
}
for (var k in d) {
var o = d[k];
var m;
while ((m = o.reg.exec(fmt)) != null) {
o.idx = m.index;
o.len = m[0].length;
o.val = parseInt(s.substr(o.idx, o.len));
}
}
d.y.val = d.y.val || 0;
d.M.val = d.M.val || 0;
d.d.val = d.d.val || 0;
if (d.H.val == null || isNaN(d.H.val)) {
if (!isNaN(d.h.val) && typeof (d.h.val) === 'number') {
var am = /am/i.test(s);
if (am) d.H.val = d.h.val;
else d.H.val = d.h.val + 12;
} else {
d.H.val = 0;
}
}
d.m.val = d.m.val || 0;
d.s.val = d.s.val || 0;
d.S.val = d.S.val || 0;
return (new Date(d.y.val, d.M.val - 1, d.d.val, d.H.val, d.m.val, d.s.val, d.S.val));
}