|
@@ -0,0 +1,78 @@
|
|
|
+
|
|
|
+// 解析时间字符串 格式标记为 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;
|
|
|
+}
|