在utils中定义了一个formatTime.ts
import moment from 'moment';
// eslint-disable-next-line spellcheck/spell-checker
moment.locale('zh-cn'); // 设置语言 或 moment.lang('zh-cn');
// 实现年月日周几
export const dateWeek = (function getDateWeek () {
const date = new Date();
const day = date.getDay(); // 周一返回的是1,周六是6,国外第一天是周日,所以0 是周日
const arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
return moment(date).format('YYYY年MM月DD日') + ' ' + arr[day];
})();
// 将后端传来的时间 弄成自己想要的格式
export function dateTime (date: number | string |Date) {
return moment(date).format('YYYY-MM-DD HH:mm:ss');
}
上面还涉及到了一个概念 立即执行函数
https://blog.csdn.net/garrulousabyss/article/details/85193494
(function xxx(){}) () 立即执行函数
function xxx(){} 声明了一个立即函数 () 调用此函数
那么为什么还要用另一对括号把匿名函数包起来呢? // 为了兼容 JS 的语法。
立即执行函数有什么用呢?
创建一个独立的作用域。
以一个著名的面试题为例:
var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
liList[i].onclick = function(){
alert(i) // 为什么 alert 出来的总是 6,而不是 0、1、2、3、4、5
}
}
为什么 alert 的总是 6 呢,因为 i 是贯穿整个作用域的,而不是给每个 li 分配了一个 i,如下:
那么怎么解决这个问题呢?用立即执行函数给每个 li 创造一个独立作用域即可(当然还有其他办法):
var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
(function(ii){
liList[ii].onclick = function(){
alert(ii) // 0、1、2、3、4、5
}
})(i) // i 当作参数 传给上面的函数
}
在立即执行函数执行的时候,i 的值被赋值给 ii,此后 ii 的值一直不变。
i 的值从 0 变化到 5,对应 6 个立即执行函数,这 6 个立即执行函数里面的 ii 「分别」是 0、1、2、3、4、5。