js获取时间常见用法整理

业务需求中常用的时间选择器需给定默认时间段,或者校验是否在某时间段内,这时候总是现去查很浪费时间,因此整理了一下常用的默认时间,方便后续需要直接时候来查(copy),我比较常用的插件是moment.js,所以本文给了两种获取方式:一个原生js方式获取时间端段,一个直接用moment.js插件中方法获取时间段

Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率。

js原生获取时间段

//格式化时间
export function formatTime(param) {
  const y = param.getFullYear();
  let m = param.getMonth() + 1;
  let d = param.getDate();
  m = m < 10 ? `0${m}` : m;
  d = d < 10 ? `0${d}` : d;
  return `${y}-${m}-${d} `;
}
/**
 * 以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)
 * @param { string } code
 * @returns { Object }
 */
export function getDate(code) {
  const date = new Date();
  const endTime = formatTime(date);
  const date1 = Date.parse(date);
  let start = '';
  let end = '';
  const oneDay = 1000 * 3600 * 24;

  // eslint-disable-next-line default-case
  switch (code) {
  //今天
  case 'today':
    start = new Date();
    break;
    //最近2天
  case 'lastTwoDay':
    start = date1 - oneDay * 2;
    break;
    //最近1周
  case 'lastOneWeek':
    start = date1 - oneDay * 7;
    break;
    //最近2周
  case 'lastTwoWeek':
    start = date1 - oneDay * 14;
    break;
    //最近1月
  case 'lastOneMonth':
    start = new Date();
    start.setMonth(start.getMonth() - 1);
    break;
    //最近2月
  case 'lastTwoMonth':
    start = new Date();
    start.setMonth(start.getMonth() - 2);
    break;
    //最近3月
  case 'lastThreeMonth':
    start = new Date();
    start.setMonth(start.getMonth() - 3);
    break;
    //最近半年
  case 'lastHalfYear':
    start = date1 - oneDay * 183;
    break;
    //最近一年
  case 'lastOneYear':
    start = new Date();
    start.setYear(start.getFullYear() - 1);
    break;
    //本周
  case 'thisWeek':
    const a = 6 - date.getDay();
    start = new Date(date1 - oneDay * a).setHours(0, 0, 0, 0);
    end = new Date(date1 + oneDay * (1 + date.getDay())).setHours(24, 0, 0, 0);
    break;
    //本月
  case 'thisMonth':
    start = new Date();
    start.setHours(0, 0, 0, 0);
    start.setMonth(start.getMonth(), 1);
    end = new Date(start);
    end.setHours(0, 0, 0, 0);
    end.setMonth(start.getMonth() + 1, 1);
    break;
    //本年
  case 'thisYear':
    start = new Date();
    start.setHours(0, 0, 0, 0);
    start.setMonth(0, 1);
    start.setYear(start.getFullYear());
    end = new Date(start);
    end.setHours(0, 0, 0, 0);
    end.setMonth(start.getMonth(), 1);
    end.setYear(start.getFullYear() + 1);
    break;
  }

  return {
    startTime: formatTime(new Date(start)),
    endTime: end ? formatTime(new Date(end)) : endTime,
  };
}

moment.js中常用默认时间段

近期时间(分为起始时间和结束时间构成的时间段,结束时间是当前的时间):

日(近一天):

moment().day(moment().day() - 1).format('YYYY-MM-DD HH:mm:ss') // 当前时间往前推一天的时间
moment().format('YYYY-MM-DD HH:mm:ss') // 结束时间(当前系统的时间)

最近三天(昨天今天明天)

moment().day(moment().day() - 1).format('YYYY-MM-DD HH:mm:ss') // 当前时间往前推一天的时间
moment().day(moment().day() + 1).format('YYYY-MM-DD HH:mm:ss') // 结束时间(当前时间往后推一天的时间)
<DatePicker
format="YYYY-MM-DD"
valueOfType="string"
type="date"
clearable
placeholder="请选择剔除日期"
disabledDate={(cur) => cur.unix() < Date.now() / 1000 - 3600 * 24 * 1 || cur.unix() > Date.now() / 1000 + 3600 * 24 * 2}
/>

周(近一周):

moment().day(moment().day() - 6).format('YYYY-MM-DD HH:mm:ss') // 当前时间往前推一周的时间
moment().format('YYYY-MM-DD HH:mm:ss') // 结束时间(当前系统的时间)

月(近一个月):

moment().subtract(1, 'months').format('YYYY-MM-DD HH:mm:ss') // 当前时间往前推一个月的时间
moment().format('YYYY-MM-DD HH:mm:ss') // 结束时间(当前系统的时间)

季(近三个月):

moment().subtract(1, 'quarters').format('YYYY-MM-DD HH:mm:ss') // 当前时间往前推三个月的时间
moment().format('YYYY-MM-DD HH:mm:ss') // 结束时间(当前系统的时间)

半年(近六个月):

moment().subtract(6, 'months').format('YYYY-MM-DD HH:mm:ss') // 当前时间往前推六个月的时间
moment().format('YYYY-MM-DD HH:mm:ss') // 结束时间(当前系统的时间)

最近半年

const createTime = [moment().subtract(183, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'), moment().format('YYYY-MM-DD HH:mm:ss')];

年(近一年):

moment().subtract(1, 'years').format('YYYY-MM-DD HH:mm:ss') 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值