datetime.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. <template>
  2. <view class="datatime">
  3. <picker mode="multiSelector" :range="range" range-key="text" @change="change" @columnchange="columnchange" :value="value" :disabled="disabled">
  4. <view class="content">
  5. <text>{{dataTime}}</text>
  6. </view>
  7. </picker>
  8. </view>
  9. </template>
  10. <script>
  11. export default {
  12. /**
  13. * 数据
  14. */
  15. props: {
  16. // 是否禁用
  17. disabled: {
  18. type: Boolean,
  19. default: false
  20. },
  21. // 占位符
  22. dataTime: {
  23. type: String,
  24. default: '请选择'
  25. },
  26. // 表示有效日期时间范围的开始,
  27. // 字符串格式为 "YYYY-MM-DD hh:mm"
  28. start: {
  29. type: String,
  30. default: '1970-1-1 00:00'
  31. },
  32. // 表示有效日期时间范围的结束
  33. // 字符串格式为 "YYYY-MM-DD hh:mm"
  34. end: {
  35. type: String,
  36. default: '2300-1-1 00:00'
  37. },
  38. // 表示选择器的粒度,有效值:year | month | day | hour | minute
  39. fields: {
  40. type: String,
  41. default: 'minute'
  42. },
  43. // 默认值
  44. // 字符串格式为 "YYYY-MM-DD hh:mm"
  45. defaultValue: {
  46. type: String,
  47. default: ''
  48. }
  49. },
  50. /**
  51. * 数据
  52. */
  53. data() {
  54. return {
  55. range: [],
  56. value: [],
  57. dateStr: '', // 最终显示的字符串
  58. dtStart: null, // 有效范围开始
  59. dtEnd: null, // 有效范围结束
  60. };
  61. },
  62. /**
  63. * 监听数据
  64. */
  65. watch: {
  66. // 默认值
  67. defaultValue() {
  68. // 设置默认值
  69. this.setDefaultValue();
  70. }
  71. },
  72. /**
  73. * 组件初次加载完成
  74. */
  75. mounted() {
  76. // 有效日期开始和结束
  77. let start = this.start;
  78. let end = this.end;
  79. // 验证是否是有效的开始和结束日期
  80. if(!this.isString(this.start)) {
  81. console.log('开始日期需为String类型,格式为 "YYYY-MM-DD hh:mm"');
  82. start = '1970-1-1 00:00';
  83. }
  84. if(!this.isString(this.start)) {
  85. console.log('结束日期需为String类型,格式为 "YYYY-MM-DD hh:mm"');
  86. start = '2300-1-1 00:00';
  87. }
  88. // 将开始日期和结束日期转为 Date
  89. let dtStart = this.formatDate(start).dt;
  90. let dtEnd = this.formatDate(end).dt;
  91. // 判断有效日期结束是否大于有效日期开始,如果不是,则将有效日期结束修改为有效日期开始往后300年
  92. if (dtEnd <= dtStart) {
  93. dtEnd = this.formatDate(start).dt;
  94. dtEnd.setFullYear(dtStart.getFullYear() + 300);
  95. dtEnd.setDate(dtEnd.getDate() - 1);
  96. }
  97. // 更新开始日期和结束日期
  98. this.dtStart = dtStart;
  99. this.dtEnd = dtEnd;
  100. // 设置默认值
  101. this.setDefaultValue();
  102. },
  103. /**
  104. * 方法
  105. */
  106. methods: {
  107. /**
  108. * 确认选择
  109. */
  110. change(event) {
  111. let year, month, day, hour, minute;
  112. if(this.fields == 'year') {
  113. year = this.range[0][this.value[0]].number; // 年
  114. let dtStr = `${year}`;
  115. this.setDateStr(dtStr);
  116. this.$emit('change', this.formatDate(dtStr));
  117. return;
  118. }
  119. else if(this.fields == 'month') {
  120. year = this.range[0][this.value[0]].number; // 年
  121. month = this.range[1][this.value[1]].number; // 月
  122. let dtStr = `${year}-${month}`;
  123. this.setDateStr(dtStr);
  124. this.$emit('change', this.formatDate(dtStr));
  125. return;
  126. }
  127. else if(this.fields == 'day') {
  128. year = this.range[0][this.value[0]].number; // 年
  129. month = this.range[1][this.value[1]].number; // 月
  130. day = this.range[2][this.value[2]].number; // 日
  131. let dtStr = `${year}-${month}-${day}`;
  132. this.setDateStr(dtStr);
  133. this.$emit('change', this.formatDate(dtStr));
  134. return;
  135. }
  136. else if(this.fields == 'hour') {
  137. year = this.range[0][this.value[0]].number; // 年
  138. month = this.range[1][this.value[1]].number; // 月
  139. day = this.range[2][this.value[2]].number; // 日
  140. hour = this.range[3][this.value[3]].number; // 时
  141. day = this.range[2][this.value[2]].number; // 日
  142. let dtStr = `${year}-${month}-${day} ${hour}`;
  143. this.setDateStr(dtStr);
  144. this.$emit('change', this.formatDate(dtStr));
  145. return;
  146. }
  147. else if(this.fields == 'minute') {
  148. year = this.range[0][this.value[0]].number; // 年
  149. month = this.range[1][this.value[1]].number; // 月
  150. day = this.range[2][this.value[2]].number; // 日
  151. hour = this.range[3][this.value[3]].number; // 时
  152. minute = this.range[4][this.value[4]].number; // 分
  153. let dtStr = `${year}-${month}-${day} ${hour}:${minute}`;
  154. this.setDateStr(dtStr);
  155. this.$emit('change', this.formatDate(dtStr));
  156. return;
  157. }
  158. },
  159. /**
  160. * 设置显示的值
  161. * @param {Date|String} date 日期字符串或日期对象
  162. */
  163. setDateStr(date) {
  164. let dt = this.formatDate(date);
  165. if(this.fields == 'year') {
  166. this.dateStr = `${dt.YYYY}`;
  167. return;
  168. }
  169. if(this.fields == 'month') {
  170. this.dateStr = `${dt.YYYY}-${dt.M}`;
  171. return;
  172. }
  173. if(this.fields == 'day') {
  174. this.dateStr = `${dt.YYYY}-${dt.M}-${dt.D}`;
  175. return;
  176. }
  177. if(this.fields == 'hour') {
  178. this.dateStr = `${dt.YYYY}-${dt.M}-${dt.D} ${dt.h}时`;
  179. return;
  180. }
  181. this.dateStr = `${dt.YYYY}-${dt.M}-${dt.D} ${dt.h}:${dt.m}`;
  182. },
  183. /**
  184. * 设置年数据
  185. */
  186. setYearData() {
  187. // 有效日期
  188. let yearStart = this.dtStart.getFullYear();
  189. let yearEnd = this.dtEnd.getFullYear();
  190. // 年
  191. let years = [];
  192. for (let year = yearStart; year <= yearEnd; year++) {
  193. let item = {
  194. number: year,
  195. text: `${year}年`,
  196. };
  197. years.push(item);
  198. }
  199. this.range.splice(0, 1, years);
  200. },
  201. /**
  202. * 设置月数据
  203. * @param {Number} year 年
  204. */
  205. setMonthData(year) {
  206. // 有效日期
  207. let yearStart = this.dtStart.getFullYear();
  208. let monthStart = this.dtStart.getMonth() + 1;
  209. let yearEnd = this.dtEnd.getFullYear();
  210. let monthEnd = this.dtEnd.getMonth() + 1;
  211. // 月
  212. let months = [];
  213. let monthStartIndex = year == yearStart ? monthStart : 1;
  214. let monthEndIndex = year == yearEnd ? monthEnd : 12;
  215. for (let month = monthStartIndex; month <= monthEndIndex; month++) {
  216. let item = {
  217. number: month,
  218. text: `${month}月`,
  219. };
  220. months.push(item);
  221. }
  222. this.range.splice(1, 1, months);
  223. },
  224. /**
  225. * 设置日数据
  226. * @param {Number} year 年
  227. * @param {Number} month 月
  228. */
  229. setDayData(year, month) {
  230. // 有效日期
  231. let yearStart = this.dtStart.getFullYear();
  232. let monthStart = this.dtStart.getMonth() + 1;
  233. let dayStart = this.dtStart.getDate();
  234. let yearEnd = this.dtEnd.getFullYear();
  235. let monthEnd = this.dtEnd.getMonth() + 1;
  236. let dayEnd = this.dtEnd.getDate();
  237. // 日
  238. let days = [];
  239. let dayStartIndex = year == yearStart && month == monthStart ? dayStart : 1;
  240. let dayEndIndex;
  241. if(year == yearEnd && month == monthEnd) {
  242. dayEndIndex = dayEnd;
  243. } else {
  244. // 本月1号
  245. let dtThisMonth = new Date();
  246. dtThisMonth.setFullYear(year);
  247. dtThisMonth.setMonth(month - 1);
  248. dtThisMonth.setDate(1);
  249. dtThisMonth.setHours(0);
  250. dtThisMonth.setMinutes(0);
  251. dtThisMonth.setSeconds(0);
  252. dtThisMonth.setMilliseconds(0);
  253. // 下月1号
  254. let dtNextMonth = new Date();
  255. dtNextMonth.setFullYear(year);
  256. dtNextMonth.setMonth(month);
  257. dtNextMonth.setDate(1);
  258. dtNextMonth.setHours(0);
  259. dtNextMonth.setMinutes(0);
  260. dtNextMonth.setSeconds(0);
  261. dtNextMonth.setMilliseconds(0);
  262. // 计算出本月的总天数
  263. dayEndIndex = parseInt((dtNextMonth - dtThisMonth) / (86400000));
  264. }
  265. for (let day = dayStartIndex; day <= dayEndIndex; day++) {
  266. let item = {
  267. number: day,
  268. text: `${day}日`,
  269. };
  270. days.push(item);
  271. }
  272. this.range.splice(2, 1, days);
  273. },
  274. /**
  275. * 设置时数据
  276. * @param {Number} year 年
  277. * @param {Number} month 月
  278. * @param {Number} day 日
  279. */
  280. setHourData(year, month, day) {
  281. // 有效日期
  282. let yearStart = this.dtStart.getFullYear();
  283. let monthStart = this.dtStart.getMonth() + 1;
  284. let dayStart = this.dtStart.getDate();
  285. let hourStart = this.dtStart.getHours();
  286. let yearEnd = this.dtEnd.getFullYear();
  287. let monthEnd = this.dtEnd.getMonth() + 1;
  288. let dayEnd = this.dtEnd.getDate();
  289. let hourEnd = this.dtEnd.getHours();
  290. // 时
  291. let hours = [];
  292. let hourStartIndex = year == yearStart && month == monthStart && day == dayStart ? hourStart : 0;
  293. let hourEndIndex = year == yearEnd && month == monthEnd && day == dayEnd ? hourEnd : 23;
  294. for (let hour = hourStartIndex; hour <= hourEndIndex; hour++) {
  295. let item = {
  296. number: hour,
  297. text: `${hour}时`,
  298. };
  299. hours.push(item);
  300. }
  301. this.range.splice(3, 1, hours);
  302. },
  303. /**
  304. * 设置分数据
  305. * @param {Number} year 年
  306. * @param {Number} month 月
  307. * @param {Number} day 日
  308. * @param {Number} hour 时
  309. */
  310. setMinuteData(year, month, day, hour) {
  311. // 有效日期
  312. let yearStart = this.dtStart.getFullYear();
  313. let monthStart = this.dtStart.getMonth() + 1;
  314. let dayStart = this.dtStart.getDate();
  315. let hourStart = this.dtStart.getHours();
  316. let minuteStart = this.dtStart.getMinutes();
  317. let yearEnd = this.dtEnd.getFullYear();
  318. let monthEnd = this.dtEnd.getMonth() + 1;
  319. let dayEnd = this.dtEnd.getDate();
  320. let hourEnd = this.dtEnd.getHours();
  321. let minuteEnd = this.dtEnd.getMinutes();
  322. // 分
  323. let minutes = [];
  324. let minuteStartIndex = year == yearStart && month == monthStart && day == dayStart && hour == hourStart ? minuteStart : 0;
  325. let minuteEndIndex = year == yearEnd && month == monthEnd && day == dayEnd && hour == hourEnd ? minuteEnd : 59;
  326. for(let minute = minuteStartIndex; minute <= minuteEndIndex; minute++) {
  327. let item = {
  328. number: minute,
  329. text: `${minute}分`,
  330. }
  331. minutes.push(item);
  332. }
  333. this.range.splice(4, 1, minutes);
  334. },
  335. /**
  336. * 设置默认值
  337. */
  338. setDefaultValue() {
  339. // 默认日期
  340. let dtDefault;
  341. // 开始日期和结束日期
  342. let dtStart = this.dtStart;
  343. let dtEnd = this.dtEnd;
  344. // 判断是否传了默认日期
  345. // 传了默认日期,格式化默认日期为日期对象
  346. if(this.defaultValue) {
  347. dtDefault = this.formatDate(this.defaultValue).dt;
  348. }
  349. // 如果没有传默认日期,将默认日期设置为当前日期
  350. else {
  351. dtDefault = new Date();
  352. }
  353. // 如果默认日期不在有效日期范围内,设置默认日期为有效日期开始值
  354. if (dtDefault < dtStart || dtDefault > dtEnd) {
  355. dtDefault = dtStart;
  356. }
  357. // 更新 dateStr
  358. if(this.defaultValue) this.setDateStr(dtDefault);
  359. // 默认值相关数据
  360. let dfYear = dtDefault.getFullYear();
  361. let dfMonth = dtDefault.getMonth() + 1;
  362. let dfDay = dtDefault.getDate();
  363. let dfHour = dtDefault.getHours();
  364. let dfMinute = dtDefault.getMinutes();
  365. // 设置年数据
  366. this.setYearData();
  367. // 设置 Year 这一列的 value 值
  368. let yearIndex = this.range[0].findIndex(year => {
  369. return dfYear == year.number;
  370. });
  371. this.value.splice(0, 1, yearIndex >= 0 ? yearIndex : 0);
  372. // 设置月数据
  373. if(this.fields == 'year') return;
  374. this.setMonthData(dfYear);
  375. // 设置 Month 这一列的 value 值
  376. let monthIndex = this.range[1].findIndex(month => {
  377. return dfMonth == month.number;
  378. });
  379. this.value.splice(1, 1, monthIndex >=0 ? monthIndex : 0);
  380. // 设置日数据
  381. if(this.fields == 'month') return;
  382. this.setDayData(dfYear, dfMonth);
  383. // 设置 Day 这一列的 value 值
  384. let dayIndex = this.range[2].findIndex(day => {
  385. return dfDay == day.number;
  386. });
  387. this.value.splice(2, 1, dayIndex >=0 ? dayIndex : 0);
  388. // 设置时数据
  389. if(this.fields == 'day') return;
  390. this.setHourData(dfYear, dfMonth, dfDay);
  391. // 设置 Hour 这一列的 value 值
  392. let hourIndex = this.range[3].findIndex(hour => {
  393. return dfHour == hour.number;
  394. });
  395. this.value.splice(3, 1, hourIndex >=0 ? hourIndex : 0);
  396. // 设置分数据
  397. if(this.fields == 'hour') return;
  398. this.setMinuteData(dfYear, dfMonth, dfDay, dfHour);
  399. // 设置 Minute 这一列的 value 值
  400. let minuteIndex = this.range[4].findIndex(minute => {
  401. return dfMinute == minute.number;
  402. });
  403. this.value.splice(4, 1, minuteIndex >=0 ? minuteIndex : 0);
  404. },
  405. /**
  406. * 某一列的值改变时触发
  407. * @param {Number} event.detail.column 表示改变了第几列(下标从0开始)
  408. * @param {Number} event.detail.value 表示变更值的下标
  409. */
  410. columnchange(event) {
  411. let columnIndex = event.detail.column; // 改变的列的下标
  412. let valueIndex = event.detail.value; // 变更值的下标
  413. // 更新改变列的 value
  414. this.value.splice(columnIndex, 1, valueIndex);
  415. // 改变年要更新月数据
  416. if(this.fields == 'year') return;
  417. if (columnIndex == 0) {
  418. // 当前选择的月
  419. let monthBeforeUpdate = this.range[1][this.value[1]];
  420. // 更新月数据
  421. this.setMonthData(this.range[0][this.value[0]].number);
  422. // 更新 Month Value
  423. let monthIndex = this.range[1].findIndex(month => {
  424. return month.number == monthBeforeUpdate.number;
  425. });
  426. this.value.splice(1, 1, monthIndex >= 0 ? monthIndex : 0);
  427. }
  428. // 改变年、月都要更新日数据
  429. if(this.fields == 'month') return;
  430. if (columnIndex == 0 || columnIndex == 1) {
  431. // 当前选择的日
  432. let dayBeforeUpdate = this.range[2][this.value[2]];
  433. // 更新日数据
  434. this.setDayData(this.range[0][this.value[0]].number, this.range[1][this.value[1]].number);
  435. // 更新 Day Value
  436. let dayIndex = this.range[2].findIndex(day => {
  437. return day.number == dayBeforeUpdate.number;
  438. });
  439. this.value.splice(2, 1, dayIndex >= 0 ? dayIndex : 0);
  440. }
  441. // 改变年、月、日都要更新时数据
  442. if(this.fields == 'day') return;
  443. if (columnIndex == 0 || columnIndex == 1 || columnIndex == 2) {
  444. // 当前选择的时
  445. let hourBeforeUpdate = this.range[3][this.value[3]];
  446. // 更新时数据
  447. this.setHourData(this.range[0][this.value[0]].number, this.range[1][this.value[1]].number, this.range[2][this.value[2]].number);
  448. // 更新 Hour Value
  449. let hourIndex = this.range[3].findIndex(hour => {
  450. return hour.number == hourBeforeUpdate.number;
  451. });
  452. this.value.splice(3, 1, hourIndex >= 0 ? hourIndex : 0);
  453. }
  454. // 当前选择的分
  455. if(this.fields == 'hour') return;
  456. let minuteBeforeUpdate = this.range[4][this.value[4]];
  457. // 更新分数据
  458. this.setMinuteData(this.range[0][this.value[0]].number, this.range[1][this.value[1]].number, this.range[2][this.value[2]].number, this.range[3][this.value[3]].number);
  459. // 更新 Minute Value
  460. let minuteIndex = this.range[4].findIndex(minute => {
  461. return minute.number == minuteBeforeUpdate.number;
  462. });
  463. this.value.splice(4, 1, minuteIndex >= 0 ? minuteIndex : 0);
  464. },
  465. /**
  466. * 判断数据是否是 String 类型
  467. * @param {Any} val 要判断的数据
  468. * @returns {Boolean} true:是;false:不是;
  469. */
  470. isString(val) {
  471. return Object.prototype.toString.call(val) === '[object String]';
  472. },
  473. /**
  474. * 精确判断数据是否是 Date 类型
  475. * @param {Any} val 要判断的数据
  476. * @returns {Boolean} true:是;false:不是;
  477. */
  478. isDate(val) {
  479. return Object.prototype.toString.call(val) === '[object Date]';
  480. },
  481. /**
  482. * 格式化日期
  483. * @param {Date|String} date 日期或日期字符串
  484. */
  485. formatDate(date) {
  486. let YYYY = null;
  487. let M = null;
  488. let MM = null;
  489. let D = null;
  490. let DD = null;
  491. let h = null;
  492. let hh = null;
  493. let m = null;
  494. let mm = null;
  495. let s = null;
  496. let ss = null;
  497. let ms = null;
  498. let ms2 = null;
  499. let ms3 = null;
  500. let ms4 = null;
  501. let dt = null;
  502. // 如果 date 是 String 类型
  503. if (date && this.isString(date)) {
  504. // 当前日期
  505. let dt = new Date();
  506. // 真机运行时,如果直接用 new Date('YYYY-MM-DD hh:mm:ss') 会报 Invalid Date 错误,所以采用下面的方式创建日期
  507. let dtArr = date.replace(/\//g, '.').replace(/-/g, '.').replace(/:/g, '.').replace(/T/g, ' ').replace(' ', '.').replace(
  508. 'Z', '').split('.');
  509. // 年
  510. if (dtArr.length > 0 && !isNaN(dtArr[0])) {
  511. dt.setFullYear(parseInt(dtArr[0]));
  512. }
  513. // 月
  514. if (dtArr.length > 1 && !isNaN(dtArr[1])) {
  515. dt.setMonth(parseInt(dtArr[1]) - 1);
  516. }
  517. // 日
  518. if (dtArr.length > 2 && !isNaN(dtArr[2])) {
  519. dt.setDate(parseInt(dtArr[2]));
  520. }
  521. // 时
  522. if (dtArr.length > 3 && !isNaN(dtArr[3])) {
  523. dt.setHours(parseInt(dtArr[3]));
  524. } else {
  525. dt.setHours(0);
  526. }
  527. // 分
  528. if (dtArr.length > 4 && !isNaN(dtArr[4])) {
  529. dt.setMinutes(parseInt(dtArr[4]));
  530. } else {
  531. dt.setMinutes(0);
  532. }
  533. // 秒
  534. if (dtArr.length > 5 && !isNaN(dtArr[5])) {
  535. dt.setSeconds(parseInt(dtArr[5]));
  536. } else {
  537. dt.setSeconds(0);
  538. }
  539. // 毫秒
  540. if (dtArr.length > 6 && !isNaN(dtArr[6])) {
  541. dt.setMilliseconds(parseInt(dtArr[6]));
  542. } else {
  543. dt.setMilliseconds(0);
  544. }
  545. date = dt;
  546. }
  547. // 如果 date 是 Date 类型
  548. if (date && this.isDate(date)) {
  549. YYYY = date.getFullYear();
  550. M = date.getMonth() + 1;
  551. MM = M >= 10 ? M : '0' + M;
  552. D = date.getDate();
  553. DD = D >= 10 ? D : '0' + D;
  554. h = date.getHours();
  555. hh = h >= 10 ? h : '0' + h;
  556. m = date.getMinutes();
  557. mm = m >= 10 ? m : '0' + m;
  558. s = date.getSeconds();
  559. ss = s >= 10 ? s : '0' + s;
  560. ms = date.getMilliseconds();
  561. ms2 = ms;
  562. ms3 = ms;
  563. ms4 = ms;
  564. if (ms < 10) {
  565. ms2 = '0' + ms;
  566. ms3 = '00' + ms;
  567. ms4 = '000' + ms;
  568. } else if (ms < 100) {
  569. ms3 = '0' + ms;
  570. ms4 = '00' + ms;
  571. } else {
  572. ms4 = '0' + ms;
  573. }
  574. }
  575. // 返回的数据对象
  576. let result = {
  577. YYYY: YYYY,
  578. MM: MM,
  579. M: M,
  580. DD: DD,
  581. D: D,
  582. hh: hh,
  583. h: h,
  584. mm: mm,
  585. m: m,
  586. ss: ss,
  587. s: s,
  588. ms: ms,
  589. ms2: ms2,
  590. ms3: ms3,
  591. ms4: ms4,
  592. dt: date,
  593. fmt1: `${YYYY}-${MM}-${DD}`,
  594. fmt2: `${YYYY}年${M}月${D}日`,
  595. fmt3: `${YYYY}-${M}-${D} ${hh}:${mm}`,
  596. fmt4: `${h}:${m}:${s}`,
  597. fmt5: `${MM}-${DD}`,
  598. fmt6: `${YYYY}-${MM}`,
  599. fmt7: `${YYYY}年${M}月`,
  600. fmt8: `${h}:${m}`,
  601. fmt9: `${M}月${D}日`,
  602. notes: 'YYYY(年),MM(月,补0),M(月,不补0),DD(日,补0),D(日,不补0),hh(时,补0),h(时,不补0),mm(分,补0),m(分,不补0),ss(秒,补0),s(秒,不补0),ms(毫秒,不补0),ms2(毫秒,补0到2位),ms3(毫秒,补0到3位),ms4(毫秒,补0到4位),其余的fmt1,fmt2,... 看格式就知道了!'
  603. };
  604. return result;
  605. }
  606. }
  607. };
  608. </script>
  609. <style lang="scss" scoped>
  610. /* .content {
  611. text-align: right;
  612. margin-right: 60px!important;
  613. color: white;
  614. } */
  615. </style>