获取年月日星期几

请添加图片描述
在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。

你可能感兴趣的:(typescript,vue.js)