zoukankan      html  css  js  c++  java
  • js日期格式转换的相关问题探讨

    探讨问题1: 如何将 2017年8月22日 转换成 2017-8-22 / 2017-08-22呢

    '2017年8月22日'.replace(/[年月日]/g,'-');
    
    '2017年8月22日'.match(/d+/g).join('-')
    '2017年8月22日'.replace(/[年月]/g,'-').replace('日','');

    点评:第一种形式 返回的是

    2017-8-22-
    //这时我们可以通过字符串截取来处理
    '2017年8月22日'.replace(/[年月日]/g,'-').slice(0,-1);  

    上面日期 如果小于10,补0 ,则需要用如下方法

    '2017年8月22日'.match(/d+/g).map(n => +n < 10 ? '0'+n : n).join('-')
    
    function format( str ) {
        var result = /^(d+)年(d+)月(d+)日$/.exec(str)
        if( result ) {
            var y = result[ 1 ];
            var m = result[ 2 ];
            var d = result[ 3 ];
            m = Number( m ) < 10 ? '0' + m : m;
            d = Number( d ) < 10 ? '0' + d : d;
            return y + '-' + m + '-' + d;
        }
        return null;
    }
    console.log(format( '2017年8月22日'))
    '2017年8月22日'.match(/d{1,4}/g).join('-').replace(/d+/g, function(d) {
       return (d.length > 1)? d : ('0' + d);
    })
         
    '2017年8月22日'.replace(/(d+)日/, function(_d, d) {
       return (d.length == 2)? ('-' + d) : ('-0' + d);
    }).replace(/(d+)月/, function(_m, m) {
       return (m.length == 2)? ('-' + m) : ('-0' + m);
    }).replace(/(d+)年/, function(_y, y) {
       return y;
    })
         
    '2017年8月22日'.replace(/(d+)[年,月,日]/g, function(_d,d) {
       return (d.length > 1) ? d.length == 4 ? d : ('-' + d) : ('-0' + d);
    })
    
    '2017年8月22日'.replace(/(d{4})年(d{1,2})月(d{1,2})日/, (a,b,c,d)=>{
       return `${b}-${c>9?c:'0'+c}-${d}`
     })

    探讨问题2: 如何计算指定月份的天数

    要想得到某月有多少天,只需要获取到当月最后一天的日期就行了

    围绕这一思路,灵活调用 setMonth(),getMonth(),setDate(),getDate(),计算出所需日期

    function getMonthLength(date) {
      let d = new Date(date)
      // 将日期设置为下月一号
      d.setMonth(d.getMonth()+1)
      d.setDate('1')
      // 获取本月最后一天
      d.setDate(d.getDate()-1)
      return d.getDate()
    }
    getMonthLength("2018-02-24");

    比较好的 做法是   new Date(year,month,0).getDate() 

    //使用 new Date() 创建时间对象时,如果 date 传入 0,就能直接通过 getDate() 获取到最后一天的日期
    new Date(2018,2,0).getDate()
  • 相关阅读:
    Codeforces 627A XOR Equation(思路)
    Codeforces 633C Spy Syndrome 2(DP + Trie树)
    BZOJ 1982 [Spoj 2021]Moving Pebbles(博弈论)
    BZOJ 3676 [Apio2014]回文串(回文树)
    BZOJ 3790 神奇项链(manacher+DP+树状数组)
    Codeforces 449D Jzzhu and Numbers(高维前缀和)
    SPOJ Time Limit Exceeded(高维前缀和)
    BZOJ 4031 [HEOI2015]小Z的房间(Matrix-Tree定理)
    BZOJ 3809 Gty的二逼妹子序列(莫队+分块)
    BZOJ 3544 [ONTAK2010]Creative Accounting(set)
  • 原文地址:https://www.cnblogs.com/zuobaiquan01/p/8414177.html
Copyright © 2011-2022 走看看