时间获取、转换与moment使用

318 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

前言

在前端开发过程中,最常用的时间转换就是时间戳转为标准时间格式了,但是除此之外,标准格式转为时间戳,获取前一天、前一周、前一年的时间等等,这些用得也不少,为了便于在以后的开发中使用,将最常用的一些时间获取与转换的方式总结记录如下。
引用moment插件也可以轻松完成时间的获取与转换功能,我们在开发过程中,哪种用得比较顺手就用哪种,重要的是实现。

1、分别获取当前年月日时分秒

var date = new Date(); // 获取当前时间
var year = date.getFullYear(); // 获取年
var month = date.getMonth() + 1; // 获取月
var day = date.getDate(); // 获取日
var hour = date.getHours(); // 获取时
var minutes = date.getMinutes(); // 获取 分
var seconds = date.getSeconds(); // 获取秒
var weekArr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'];
var week = weekArr[date.getDay()];  // 获取星期

2、获取当前日期

思路:这个就直接封装成一个外部方法,我几乎每次开发都会用到,根据1分别获取年月日时分秒星期,然后将这几项拼接成我们所需要的数据格式返回,参数type传1、2、3,。月日时分秒需要加判断,小于10的数字,需要在前面加0,如9月,需要显示为09,其他同理。

  • 当type=1的时候,返回的时间格式(年月日时分秒)2022-11-11 22:22:22
  • 当type=2的时候,返回的时间格式(年月日)2022-11-11
  • 当type=3的时候,返回星期
getFormatDate (type,date) {
  var sign2 = ":";
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var hour = date.getHours();
  var minutes = date.getMinutes();
  var seconds = date.getSeconds();
  var weekArr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'];
  var week = weekArr[date.getDay()];
  // 给一位数的数据前面加 “0”
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  if (day >= 0 && day <= 9) {
    day = "0" + day;
  }
  if (hour >= 0 && hour <= 9) {
    hour = "0" + hour;
  }
  if (minutes >= 0 && minutes <= 9) {
    minutes = "0" + minutes;
  }
  if (seconds >= 0 && seconds <= 9) {
    seconds = "0" + seconds;
  }
  if (type==1) {
       return year + "-" + month + "-" + day + " " + hour + sign2 + minutes + sign2 + seconds;
  } else if (type==2) {
       return year + "-" + month + "-" + day;
  } else if (type==3) {
      return week;
  }
}

3、获取一个月前、一年前的日期

思路:利用new Date()方法转,然后根据自己需要的格式进行优化,gerFormateDate方法为上面2中的方法。想获取一个月前的时间,num表示num个月前,一个月前num=2,一年前num=13。
代码如下:

const getFDate = (num) => {
    const date = getFormatDate(2,new Date()).split('-')
    let yy0=parseInt(date[0]);
    let mm0=parseInt(date[1]);
    let dd0=parseInt(date[2]);
    let pdStr = getFormatDate(2,new Date(yy0,mm0-num,dd0)); 
    return pdStr; // 可针对需要的格式进行优化。
 }

4、moment插件使用

moment.js是JavaScript日期处理类库,也就是用于日期格式转换的,官网中有详细的使用说明。
官网地址:momentjs.cn/

angular集成moment.js:

  • 使用npm安装moment.js
npm install --save moment
  • 使用moment.js的ts文件中导入
import * as moment from 'moment';
  • 环境语言导入
使用moment.locale,首先需要导入目标语言
import * as moment from 'moment'; 
import 'moment/locale/pt-br';
console.log(moment.locale()); // en 
moment.locale('pt-BR');
console.log(moment.locale()); // pt-BR
  • 使用moment.js
date = moment(theDate).format('MM/DD/YYYY HH:mm');
或者
import * as moment from 'moment';
theDate = moment();
date = theDate.format('YYYY.M.D')

vue集成moment.js:

  • 引入库
npm install moment --save
  • 在main.js中全局引入
import moment from "moment" 
Vue.prototype.$moment = moment;
  • 在需要使用日期的地方使用
/* html中 */
<el-date-picker
    	v-model="timeRange"
        type="datetimerange"
        range-separator="至"
        start-placeholder="开始日期"
        end-placeholder="结束日期">
</el-date-picker>

/* js中 */
data() {
    return {
       timeRange:[],
    }
},
mounted(){
   let start = this.$moment()
      .subtract('1', 'd')
      .format('YYYY-MM-DD HH:mm:ss') //当前时间往前推1天(24小时):2021-05-10 18:42:53
   let end = this.$moment().format('YYYY-MM-DD HH:mm:ss') //当前时间:2021-05-11 18:42:53
   this.timeRange=[start,end]
}