坚果大叔 坚果大叔
  • 首页
  • 闲言碎语
  • 技术
  • 生活
  • 记录
  • 朋友
  • 热点新闻
  • 常用代码
  • 工具箱
  • 关于
首页 › 技术 › JS生成Van-Picker 指定日期格式

JS生成Van-Picker 指定日期格式

坚果大叔
2023-06-26 17:28:12技术阅读 1,957

项目中需要根据后台配置生成指定的Picker日期格式,按照自然月或者按照指定日期生成月区间。

1、第一种,自然月区间格式。

generateDateRanges(year) {
  const dateRanges = [];
  const currentYear = new Date().getFullYear();
  const currentMonth = new Date().getMonth();

  // 计算结束月份
  const endMonth = (year >= currentYear) ? currentMonth : 11;

  // 将日期格式化为数组对象
  for (let month = 0; month <= endMonth; month++) {
    const startDate = new Date(year, month, 1);
    const endDate = new Date(year, month + 1, 0);
    dateRanges.push({
      label: '${startDate.getMonth() + 1}月${startDate.getDate()}日至${endDate.getMonth() + 1}月${endDate.getDate()}日',
      value: [`${startDate.getFullYear()}${('0' + (startDate.getMonth() + 1)).slice(-2)}${('0' + startDate.getDate()).slice(-2)}', '${endDate.getFullYear()}${('0' + (endDate.getMonth() + 1)).slice(-2)}${('0' + endDate.getDate()).slice(-2)}']
    });
  }
  this.monthObjs = dateRanges
}

输出格式

[
  {
    label: '1月1日至1月31日',
    value: [ '20230101', '20230131' ]
  },
  {
    label: '2月1日至2月28日',
    value: [ '20230201', '20230228' ]
  },
  {
    label: '3月1日至3月31日',
    value: [ '20230301', '20230331' ]
  },
  {
    label: '4月1日至4月30日',
    value: [ '20230401', '20230430' ]
  },
  {
    label: '5月1日至5月31日',
    value: [ '20230501', '20230531' ]
  },
  {
    label: '6月1日至6月30日',
    value: [ '20230601', '20230630' ]
  }
]

实际效果

JS生成Van-Picker 指定日期格式-坚果大叔

2、第二种,指定日期生成月区间。

customDate(selectYear, date) {
  const now = new Date();

  // 如果当前月份为一月,则需要计算去年的所有月份
  const length = now.getFullYear() === selectYear ? now.getMonth() : 12;
  const startOffset = date;

  // 定义结束日期的偏移量为起始日期偏移量减一
  const endOffset = startOffset - 1;

  // 定义起始月份和结束月份的数组
  const months = Array.from({ length: length }, (_, i) => ({
    start: new Date(i === 0 ? selectYear - 1 : selectYear, i, startOffset),
    end: new Date(i === 11 ? selectYear : selectYear, (i + 1) % 12, endOffset),
  }));

  // 将日期格式化为数组对象
  const monthObjs = months.map(({ start, end }) => ({
    label: '${start.getMonth() + 1}月${start.getDate()}日至${end.getMonth() + 1}月${end.getDate()}日',
    value: [
      '${start.getFullYear()}${(start.getMonth() + 1).toString().padStart(2, '0')}${start.getDate().toString().padStart(2, '0')}',
      '${end.getFullYear()}${(end.getMonth() + 1).toString().padStart(2, '0')}${end.getDate().toString().padStart(2, '0')}'
    ],
    isStart: end > now,
  }));

  this.monthObjs = monthObjs
}

输出结果

[
  {
    "label": "1月6日-2月5日",
    "value": ["20230106", "20230205"],
  },
  {
    "label": "2月6日-3月5日",
    "value": ["20230206", "20230305"],
  },
  {
    "label": "3月6日-4月5日",
    "value": ["20230306", "20230405"],
  },
  {
    "label": "4月6日-5月5日",
    "value": ["20230406", "20230505"],
  },
  {
    "label": "5月6日-6月5日",
    "value": ["20230506", "20230605"],
  }
]

实际效果

JS生成Van-Picker 指定日期格式-坚果大叔

日期
赞赏 赞(1)
夏天到了
上一篇
Md5引发的血案
下一篇
在小程序中查看
搜你想看的
聚合文章
将数组中空值字段赋默认值!
新的开始,新的征程。Go~
一款高仿mac版微信的单页面应用(还在更新中)
Home
闲言碎语
Memos
npm install 出现 Error:EISDIR:illegal operation on a directory 的错误提示!
2025-03-31 19:02:11
559 0 0
iphone 利用 Scriptable 添加网上国网电费小组件
2025-01-06 20:40:20
5,006 6 2
在博客中加上memos记录展示。
2024-12-25 23:41:27
2,333 5 2
网页点击平滑滚动效果~
2024-10-17 16:43:08
2,037 4
1
  • 1
博主

一位佛系的前端开发者,略通摄影,乐于尝试新事物,热衷于美食。

友链
故事胶片
公众号
坚果大叔 执行上下文 卖坚果的怪叔叔 Dacking
Copyright © 2017-2025 坚果大叔

开往-友链接力

萌ICP备20230818号

苏ICP备18048410号-3
  • 首页
  • 闲言碎语
  • 技术
  • 生活
  • 记录
  • 朋友
  • 热点新闻
  • 常用代码
  • 工具箱
  • 关于
# CSS # # JavaScript # # vue # # 微信 # # 生活 #
坚果大叔
317
文章
125
评论
365
喜欢