util.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // 解析时间字符串 格式标记为 yyyy MM dd HH mm ss SSS
  2. var date_formats_flag = {
  3. "y": { idx: 0, name: "yyyy", len: 4, re: /^\d{4}$/, p: 0 },
  4. "M": { idx: 1, name: "MM", len: 2, re: /^\d{2}$/, p: 5 },
  5. "d": { idx: 2, name: "dd", len: 2, re: /^\d{2}$/, p: 8 },
  6. "H": { idx: 3, name: "HH", len: 2, re: /^\d{2}$/, p: 11 },
  7. "m": { idx: 4, name: "mm", len: 2, re: /^\d{2}$/, p: 14 },
  8. "s": { idx: 5, name: "ss", len: 2, re: /^\d{2}$/, p: 17 },
  9. "S": { idx: 6, name: "SSS", len: 3, re: /^\d{3}$/, p: 20 },
  10. };
  11. now = new Date();
  12. function parseTime(sfmt, yMdHmsS) {
  13. if (!sfmt) {
  14. throw ("没有指定时间格式");
  15. }
  16. if (!yMdHmsS) {
  17. throw ("没有指定时间字符串");
  18. }
  19. try {
  20. if (sfmt.length != yMdHmsS.length) {
  21. throw ("长度不一致");
  22. }
  23. var dt = [null, null, null, null, null, null, null];
  24. for (var i = 0; i < sfmt.length; i++) {
  25. var fmt = date_formats_flag[sfmt[i]];
  26. if (fmt && sfmt.length >= i + fmt.len && sfmt.substr(i, fmt.len) == fmt.name) {
  27. if (yMdHmsS.length < i + fmt.len) {
  28. throw (fmt.name + " " + i);
  29. }
  30. var ds = yMdHmsS.substr(i, fmt.len);
  31. if (!fmt.re.test(ds)) {
  32. throw (fmt.name + " " + ds);
  33. }
  34. dt[fmt.idx] = parseInt(ds);
  35. i += fmt.len - 1;
  36. } else {
  37. if (yMdHmsS.length <= i || sfmt[i] != yMdHmsS[i]) {
  38. throw (sfmt[i]);
  39. }
  40. }
  41. }
  42. var d = new Date(
  43. dt[0] == null ? now.getFullYear() : dt[0],
  44. dt[1] == null ? now.getMonth() : dt[1] - 1,
  45. dt[2] == null ? 1 : dt[2],
  46. dt[3],
  47. dt[4],
  48. dt[5],
  49. dt[6]
  50. );
  51. d.setMinutes(d.getMinutes() - d.getTimezoneOffset());
  52. return d;
  53. } catch (e) {
  54. throw ("时间格式错误,正确格式是 " + sfmt + "," + e);
  55. }
  56. }
  57. function formatTime(sfmt, dt) {
  58. if (!sfmt) {
  59. throw ("没有指定时间格式");
  60. }
  61. if (!dt) {
  62. throw ("没有指定时间");
  63. }
  64. var ds = dt.toJSON();
  65. var s = "";
  66. for (var i = 0; i < sfmt.length; i++) {
  67. var fmt = date_formats_flag[sfmt[i]];
  68. if (fmt && sfmt.length >= i + fmt.len && sfmt.substr(i, fmt.len) == fmt.name) {
  69. s += ds.substring(fmt.p, fmt.p + fmt.len);
  70. i += fmt.len - 1;
  71. } else {
  72. s += sfmt[i];
  73. }
  74. }
  75. return s;
  76. }