tool.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { LeaderLine } from './t.js';
  2. /**
  3. * 若文档中已有命名dateFormat,可用dFormat()调用
  4. * 年(Y) 可用1-4个占位符
  5. * 月(m)、日(d)、小时(H)、分(M)、秒(S) 可用1-2个占位符
  6. * 星期(W) 可用1-3个占位符
  7. * 季度(q为阿拉伯数字,Q为中文数字)可用1或4个占位符
  8. *
  9. * let date = new Date()
  10. * dateFormat("YYYY-mm-dd HH:MM:SS", date) 2020-02-09 14:04:23
  11. * dateFormat("YYYY-mm-dd HH:MM:SS Q", date) 2020-02-09 14:09:03 一
  12. * dateFormat("YYYY-mm-dd HH:MM:SS WWW", date) 2020-02-09 14:45:12 星期日
  13. * dateFormat("YYYY-mm-dd HH:MM:SS QQQQ", date) 2020-02-09 14:09:36 第一季度
  14. * dateFormat("YYYY-mm-dd HH:MM:SS WWW QQQQ", date) 2020-02-09 14:46:12 星期日 第一季度
  15. */
  16. export function dateFormat(format, date) {
  17. if (typeof date === 'string') {
  18. date = new Date(date);
  19. }
  20. const we = date.getDay(); // 星期
  21. const qut = Math.floor((date.getMonth() + 3) / 3).toString(); // 季度
  22. const opt = {
  23. 'Y+': date.getFullYear().toString(), // 年
  24. 'm+': (date.getMonth() + 1).toString(), // 月(月份从0开始,要+1)
  25. 'd+': date.getDate().toString(), // 日
  26. 'H+': date.getHours().toString(), // 时
  27. 'M+': date.getMinutes().toString(), // 分
  28. 'S+': date.getSeconds().toString(), // 秒
  29. 'q+': qut, // 季度
  30. };
  31. const week = {
  32. // 中文数字 (星期)
  33. 0: '日',
  34. 1: '一',
  35. 2: '二',
  36. 3: '三',
  37. 4: '四',
  38. 5: '五',
  39. 6: '六',
  40. };
  41. const quarter = {
  42. // 中文数字(季度)
  43. 1: '一',
  44. 2: '二',
  45. 3: '三',
  46. 4: '四',
  47. };
  48. if (/(W+)/.test(format)) {
  49. format = format.replace(
  50. RegExp.$1,
  51. RegExp.$1.length > 1
  52. ? RegExp.$1.length > 2
  53. ? '星期' + week[we]
  54. : '周' + week[we]
  55. : week[we]
  56. );
  57. }
  58. if (/(Q+)/.test(format)) {
  59. // 输入一个Q,只输出一个中文数字,输入4个Q,则拼接上字符串
  60. format = format.replace(
  61. RegExp.$1,
  62. RegExp.$1.length === 4 ? '第' + quarter[qut] + '季度' : quarter[qut]
  63. );
  64. }
  65. for (const k in opt) {
  66. const r = new RegExp('(' + k + ')').exec(format);
  67. if (r) {
  68. // 若输入的长度不为1,则前面补零
  69. format = format.replace(
  70. r[1],
  71. RegExp.$1.length === 1 ? opt[k] : opt[k].padStart(RegExp.$1.length, '0')
  72. );
  73. }
  74. }
  75. return format;
  76. }
  77. export function createline(startEle, endEle, ...p) {
  78. return new LeaderLine(startEle, endEle, ...p);
  79. }