zoukankan      html  css  js  c++  java
  • js如何将xxxx年xx周字符串转化为时间对象

      今天在项目中遇到需要天、周、月的时间字符串转化为时间对象,例如:2020-01-01、2020年第01周、2020-01

      

       具体需求如图,点击数据点时需要从对应的横坐标提取时间实现数据钻取、查看详细数据,由于需要涉及到一些前端操作,所以转化不能放到后端。

      

      以下是我的解决方法

          var str = "2020年第01周";
                var result = str.match(/d{1,4}/g)              //匹配1~4个数字 返回一个数组
                var date = new Date(result[0]);                     //得到指定年份1月1号时间
                var weekDay =  date.getDay();                       //返回一周中的某一天 (0 ~ 6)
                weekDay==0?7:weekDay;                               //0代表周日改成7
                date = new Date(date.setDate(date.getDate()-(weekDay-1)));      //得到指定年份第一周周一时间
                var week = parseInt(result[1]);                                 //取出解析出来的周数
                date = new Date(date.setDate(date.getDate()+((week-1))*7));     //得到指定周周一时间
     

      首先用match() 方法全局匹配获取到年份和周数

      

    var result = str.match(/d{1,4}/g)

      

      然后使用得到的年份直接new一个Date对象,可以得到那一年的1月1号的Date对象

      

    var date = new Date(result[0]); 

      

      再用Date对象的getDay()方法获取1月1号是这一周的第几天

    var weekDay =  date.getDay();

      

       外国人的一般习惯使用星期天作为一周的第一天,而我们一般习惯把星期一当成一周中的第一天,所以这里把0替换成7

    weekDay==0?7:weekDay;

      

      

    例如 2020年1月1日是星期三,距离星期一是2天,也就是weekDay-1天,从1月1日减去weekDay-1天可以得到第一周的周一时间

    date = new Date(date.setDate(date.getDate()-(weekDay-1)));

      在第一周的基础上加上(week-1))*7天就能得到我们所需的时间

    date = new Date(date.setDate(date.getDate()+((week-1))*7));
  • 相关阅读:
    Freefilesync-文件夹自动同步
    考研打卡_Day077
    考研打卡_Day076
    考研打卡_Day075
    考研打卡_Day074
    考研打卡_Day073
    考研打卡_Day072
    考研打卡_Day071
    考研打卡_Day070
    考研打卡_Day069
  • 原文地址:https://www.cnblogs.com/gaojinshun/p/14029894.html
Copyright © 2011-2022 走看看