datetime-picker.vue 19 KB

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