123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // 解析时间字符串 格式标记为 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;
- }
|