// 解析时间字符串 格式标记为 yyyy MM dd HH mm ss SSS var date_formats_flag = { "y": { idx: 0, name: "yyyy", len: 4, re: /^\d{4}$/, p: 0 }, "M": { idx: 1, name: "MM", len: 2, re: /^\d{2}$/, p: 5 }, "d": { idx: 2, name: "dd", len: 2, re: /^\d{2}$/, p: 8 }, "H": { idx: 3, name: "HH", len: 2, re: /^\d{2}$/, p: 11 }, "m": { idx: 4, name: "mm", len: 2, re: /^\d{2}$/, p: 14 }, "s": { idx: 5, name: "ss", len: 2, re: /^\d{2}$/, p: 17 }, "S": { idx: 6, name: "SSS", len: 3, re: /^\d{3}$/, p: 20 }, }; now = new Date(); function parseTime(sfmt, yMdHmsS) { if (!sfmt) { throw ("没有指定时间格式"); } if (!yMdHmsS) { throw ("没有指定时间字符串"); } try { if (sfmt.length != yMdHmsS.length) { throw ("长度不一致"); } var dt = [null, null, null, null, null, null, null]; for (var i = 0; i < sfmt.length; i++) { var fmt = date_formats_flag[sfmt[i]]; if (fmt && sfmt.length >= i + fmt.len && sfmt.substr(i, fmt.len) == fmt.name) { if (yMdHmsS.length < i + fmt.len) { throw (fmt.name + " " + i); } var ds = yMdHmsS.substr(i, fmt.len); if (!fmt.re.test(ds)) { throw (fmt.name + " " + ds); } dt[fmt.idx] = parseInt(ds); i += fmt.len - 1; } else { if (yMdHmsS.length <= i || sfmt[i] != yMdHmsS[i]) { throw (sfmt[i]); } } } var d = new Date( dt[0] == null ? now.getFullYear() : dt[0], dt[1] == null ? now.getMonth() : dt[1] - 1, dt[2] == null ? 1 : dt[2], dt[3], dt[4], dt[5], dt[6] ); d.setMinutes(d.getMinutes() - d.getTimezoneOffset()); return d; } catch (e) { throw ("时间格式错误,正确格式是 " + sfmt + "," + e); } } function formatTime(sfmt, dt) { if (!sfmt) { throw ("没有指定时间格式"); } if (!dt) { throw ("没有指定时间"); } var ds = dt.toJSON(); var s = ""; for (var i = 0; i < sfmt.length; i++) { var fmt = date_formats_flag[sfmt[i]]; if (fmt && sfmt.length >= i + fmt.len && sfmt.substr(i, fmt.len) == fmt.name) { s += ds.substring(fmt.p, fmt.p + fmt.len); i += fmt.len - 1; } else { s += sfmt[i]; } } return s; }