最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JavaScript 获取日期范围

    正文概述 掘金(Drk)   2021-06-04   608

    JavaScript 获取日期范围

    例如起始时间是 2021/02/01 获取下个月的日期, 结果应为 2022/02/01.

    代码描述:

    const date = new Date("2021/02/01");
    date.setMonth(date.getMonth() + 1);
    

    又如, 根据当前时间想获取下一年零两个月五天七时八分九秒的区间日期呢? 直接操作 Date 类那简直是天灾!

    工具函数:

    /**
     * 获取日期范围
     * @param date {Date}
     * @param rule {String} [年(y)|月(M)|日(d)|时(h)|分(m)|秒(s)|毫秒(S)]
     * @param direction {Number} [-1|1]
     * @returns {Date}
     * @exmaple
     *   getDateRange(Date.now(), "1y2M3d4h5m6s7S");
     */
    function getDateRange(date, rule, direction = 1) {
      const startDate = new Date(date);
      const endDate = new Date(startDate);
      const o = {
        y: "FullYear",
        M: "Month",
        d: "Date",
        h: "Hours",
        m: "Minutes",
        s: "Seconds",
        S: "Milliseconds"
      };
      for (const key in o) {
        const reg = new RegExp(`([0-9]+)${key}`);
        const method = o[key];
        if (reg.test(rule)) {
          const match = rule.match(reg);
          const num = match[1] >> 0;
          const matchStr = match[0];
          rule = rule.replace(matchStr, "");
          endDate[`set${method}`](endDate[`get${method}`]() + num * direction);
        }
      }
      return endDate;
    }
    

    使用示例

    const date = new Date("2021/03/01 10:10:10:100");
    
    // 向后获取范围
    getDateRange(date, "1y", 1); // (format) => "2022/03/01 10:10:10:100"
    // 向前获取范围
    getDateRange(date, "1y", -1); // (format) => "2020/03/01 10:10:10:100"
    
    // 全部规则 [年(y)|月(M)|日(d)|时(h)|分(m)|秒(s)|毫秒(S)],默认向后获取
    getDateRange(date, "1y"); // (format) => "2022/03/01 10:10:10:100"
    getDateRange(date, "1M"); // (format) => "2021/04/01 10:10:10:100"
    getDateRange(date, "1d"); // (format) => "2021/03/02 10:10:10:100"
    getDateRange(date, "1h"); // (format) => "2021/03/01 11:10:10:100"
    getDateRange(date, "1m"); // (format) => "2021/03/01 10:11:10:100"
    getDateRange(date, "1s"); // (format) => "2021/03/01 10:10:11:100"
    getDateRange(date, "1S"); // (format) => "2021/03/01 10:10:10:101"
    // 组合规则
    getDateRange(date, "1y2M3d4h5m6s7S"); // (format) => "2022/05/04 14:15:16:107"
    

    相关类库

    • 成熟的日期处理类库 Moment.js

    下载网 » JavaScript 获取日期范围

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元