js获取季度,今天,昨天、本周,上一周、上一月,上一年,多久以前

网上大多日期处理都是功能不全,所以下定决心做个全的出来

        // Date.prototype.Format = function (fmt) { 
       //     var o = {
        //         "M+": this.getMonth() + 1, //月份
        //         "d+": this.getDate(), //日
        //         "h+": this.getHours(), //小时
        //         "m+": this.getMinutes(), //分
        //         "s+": this.getSeconds(), //秒
        //         "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        //         "S": this.getMilliseconds() //毫秒
        //     };
        //     if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        //     for (var k in o)
        //         if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + //o[k]).substr(("" + o[k]).length)));
        //     return fmt;
        // }
        // var s = "{time:" + new Date().Format("yyyy-MM-dd hh:mm:ss")
        // console.log(s);
        class dateFormater{
            constructor(){}
          //当前时间format
            timeFormat(fmt='yyyy-MM-dd hh:mm:ss'){
                let date = new Date()
                let o = {
                            "M+": date.getMonth() + 1, //月份
                            "d+": date.getDate(), //日
                            "h+": date.getHours(), //小时
                            "m+": date.getMinutes(), //分
                            "s+": date.getSeconds(), //秒
                            "q+": Math.floor((date.getMonth() + 3) / 3), //季度
                            "S": date.getMilliseconds() //毫秒
                        };
                if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
                for (let k in o)
                    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
                return fmt;
            }
            //获取当天当前时间===timeFormat
            currentDay(state){
                 return this.timestampToTime(null,state)
            }
            //获取昨天日期
            getYesterday(){
                return this.timestampToTime(this.getDayStartTime()-1)
            }
            //时间戳转日期
            timestampToTime(timestamp,state) {
                timestamp=timestamp?parseInt(timestamp):Date.now()
                let date = new Date(timestamp)
                let Y = date.getFullYear() + '-'
                let M = ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)) + '-'
                let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate())
                let h = (date.getHours()<10?'0'+date.getHours() + ':':date.getHours() + ':')
                let m = (date.getMinutes()<10?'0'+date.getMinutes() + ':':date.getMinutes() + ':')
                let s = (date.getSeconds()<10?'0'+date.getSeconds():date.getSeconds())
                return state ? Y + M + D +' '+ h + m + s : Y + M + D
            }
            //获取今天 或 某一天零点时间戳
            getDayStartTime(time){
                //time = '2020-12-12' || '1605801599000'
                if(!time) return new Date(this.timeFormat('yyyy/MM/dd')).getTime();//零点时间戳
                let t = new Date(time).getTime();//转为时间戳
                let d = this.timestampToTime(t).replace(/[-]/g,'/');//转为标准时间格式'2020/12/12'
                return new Date(this.timeFormat(d)).getTime();//零点时间戳
            }
            //获取今天 或某一天23:59:59时间戳
            getDayEndTime(time){
                return this.getDayStartTime(time) + 1000*60*60*24 - 1
            }
            //获取本周第一天零点时间戳
            getWeekStartDay(){
                let d=new Date().getDay();//获取今天是本周第几天
                return this.timestampToTime(this.getDayStartTime() - (d-1)*1000*3600*24);
            }
            //获取本周最后一天23:59:59时间戳
            getWeekEndDay(){
                let d=new Date().getDay();//获取今天是本周第几天
                return this.timestampToTime(this.getDayStartTime() + (7-d+1)*1000*3600*24 - 1)
            }
            //获取本周开始结束日期
            getWeek_StartStop(){
                return [this.getWeekStartDay(),this.getWeekEndDay()]
            }
            //获取上周开始结束
            getPreWeek_StartStop(){
                let n=this.getDayStartTime(new Date(this.getWeekStartDay()).getTime());//本周开始时间戳00:00:00
                return [this.timestampToTime(n-7*1000*3600*24),this.timestampToTime(n - 1000)]
            }
            //获取当月或某月天数
            getMouthDays(date){
                let y = date?new Date(date).getFullYear():new Date().getFullYear()
                let M = date?new Date(date).getMonth():new Date().getMonth()
                return new Date(y,M+1,0).getDate()
            }
            //获取本月开始日期
            getMouthStartDay(){
                let d = new Date().getDate();//获取今天是本月第几天
                let t = this.getDayStartTime() - (d-1)*1000*3600*24;//获取月初时间戳
                return this.timestampToTime(t)
            }
            //获取本月或某月结束日期
            getMouthEndDay(date){
                let y = date?new Date(date).getFullYear():new Date().getFullYear()
                let M = date?new Date(date).getMonth():new Date().getMonth()
                return this.timestampToTime(new Date(y,M+1,0).getTime())
            }
            //获取本月或某月开始、结束的日期
            getMouth_StartStop(date){
                let y = date?new Date(date).getFullYear():new Date().getFullYear();
                let M = date?new Date(date).getMonth():new Date().getMonth();
                let day = new Date(y,M+1,0)
                let end = day.getTime() + 1000*3600*24 - 1;//获取月最后一天时间戳23:59:59
                let count = day.getDate();//获取此月的天数
                let start = day.getTime() - (count-1)*1000*3600*24;//获取此月第一天时间戳00:00:00
                // console.log(start);
                return [this.timestampToTime(start),this.timestampToTime(end)]
            }
            //获取上月开始和结束日期
            getPreMouth_StartStop(){
                let y = new Date().getFullYear(),M=new Date().getMonth();
                return this.getMouth_StartStop(y+'/'+M)
            }
            //获取今年或某年第一天00:00:00日期
            getFirstDayOfYear(date){
                let y = date?new Date(date).getFullYear():new Date().getFullYear()
                return this.timestampToTime(new Date(y+'/1/1').getTime())
            }
             //获取今年或某年最后一天23:59:59日期
            getLastDayOfYear(date){
                let y = date?new Date(date).getFullYear():new Date().getFullYear()
                return this.timestampToTime(new Date(y + 1 +'/1/1').getTime()-1000)
            }
            //今年 或某年
            getYear_StartStop(date){
                return[this.getFirstDayOfYear(date),this.getLastDayOfYear(date)]
            }
            //去年
            getPreYear_StartStop(){
                let y = new Date().getFullYear()
                return[this.getFirstDayOfYear(y-1+''),this.getLastDayOfYear(y-1+'')]
            }
            //本季度
            getCurrentSeason(){
                let m = new Date().getMonth() - 0
                let t = m<3?0:m<6?1:m<9?2:3
                return this.getSeasonsOfYear()[t]
            }
            //上一季度
            getPreSeason(){
                let m = new Date().getMonth() - 0
                let t = m<3?0:m<6?1:m<9?2:3
                return this.getSeasonsOfYear()[t-1<0?0:t-1]
            }
            //本年 或某年四个季度
            getSeasonsOfYear(date){
                let y = date?new Date(date).getFullYear():new Date().getFullYear()
                let d = this.timestampToTime
                return [
                    [d(new Date(y+'/1/1').getTime()),d(new Date(y+'/4/1').getTime()-1)],
                    [d(new Date(y+'/4/1').getTime()),d(new Date(y+'/7/1').getTime()-1)],
                    [d(new Date(y+'/7/1').getTime()),d(new Date(y+'/10/1').getTime()-1)],
                    [d(new Date(y+'/10/1').getTime()),d(new Date(y+1+'/1/1').getTime()-1)]
                ]
            }
            howLongAgo(date){
                let timeStamp = date?!isNaN(date)&&(date+'').length>4?new Date(parseInt(date)).getTime():new Date(date).getTime():Date.now()
                let now = Date.now();
                let a = now - timeStamp;
                let m = 60*1000
                let h = m*60
                let d = h*24
                let z = d*7
                let M = d*30
                let y = d*365
                let result = a<=m?'刚刚':a<m*60?parseInt(a/m) + '分钟前':
                            a<h*24?(parseInt(a/h)<1?1:parseInt(a/h))+'小时前':
                            a<d*7?(parseInt(a/d)<1?1:parseInt(a/d))+'天前':
                            a<z*4?(parseInt(a/z)<1?1:parseInt(a/z))+'周前':
                            a<M*12?(parseInt(a/M)<1?1:parseInt(a/M))+'个月前':(parseInt(a/y)<1?1:parseInt(a/y))+'年前'
                return result
            }


        }

        let date = new dateFormater()
        console.log('默认获取当天',date.currentDay());
        console.log('默认获取当天',date.timestampToTime());
        console.log('默认获取当天',date.timestampToTime(null,true));


        // console.log(new Date('2020', '9','1'))
        // console.log( (new Date('2020',5,1) - new Date('10',3,1))/(3600*1000*24))
        console.log('日期1',date.timeFormat('yyyy/MM/dd hh-mm-ss'));
        console.log('日期2',date.timeFormat('yyyy-MM-dd hh-mm-ss'));
        console.log('日期3',date.timeFormat('yyyy-MM-dd hh:mm:ss'));

        console.log('非标准时间格式取到8:00:00--->',date.timestampToTime(new Date(date.timeFormat('yyyy-MM-dd')).getTime(),true));
        console.log('标准时间格式取到00:00:00---->',date.timestampToTime(new Date(date.timeFormat('yyyy/MM/dd')).getTime(),true));
        console.log('时间戳转日期',date.timestampToTime('1606060799999',false));
        console.log('时间戳转日期',date.timestampToTime('2015',true));
        console.log('今天零点时间戳',date.getDayStartTime());
        console.log('某天零点时间戳',date.getDayStartTime('2020-12-5'));
        console.log('今天23:59:59时间戳',date.getDayEndTime());
        console.log('某天23:59:59时间戳',date.getDayEndTime('2020-12-5'));
        console.log('今天=====>',date.currentDay());
        console.log('昨天=====>',date.getYesterday());
        console.log('本周开始',date.getWeekStartDay());
        console.log('本周结束',date.getWeekEndDay());
        console.log('本周开始-结束',date.getWeek_StartStop());
        console.log('上周开始-结束',date.getPreWeek_StartStop());
        console.log('当前月天数',date.getMouthDays());
        console.log('某年某月天数',date.getMouthDays('2015/8'));
        console.log('本月开始',date.getMouthStartDay());
        console.log('本月结束',date.getMouthEndDay());
        console.log('本月开始-结束',date.getMouth_StartStop());
        console.log('某年某月开始-结束',date.getMouth_StartStop('2005/5'));
        console.log('上一月',date.getPreMouth_StartStop());
        console.log('今年第一天',date.getFirstDayOfYear());
        console.log('某年第一天',date.getFirstDayOfYear('2015-10-21'));
        console.log('今年最后一天',date.getLastDayOfYear());
        console.log('某年最后一天',date.getLastDayOfYear('2015'));
        console.log('今年开始-结束',date.getYear_StartStop());
        console.log('去年开始-结束',date.getPreYear_StartStop());
        console.log('某年开始-结束',date.getYear_StartStop('2003'));
        console.log('今年四个季度',date.getSeasonsOfYear());
        console.log('某年四个季度',date.getSeasonsOfYear('2003/12/8'));
        console.log('当前季度',date.getCurrentSeason());
        console.log('上一季度',date.getPreSeason());
        console.log('多久以前-->',date.howLongAgo());
        console.log('多久以前-->',date.howLongAgo(Date.now()-10*10000));
        console.log('多久以前-->',date.howLongAgo(Date.now()-60*1000*60*2));
        console.log('多久以前-->',date.howLongAgo(Date.now()-60*1000*60*24));
        console.log('多久以前-->',date.howLongAgo(Date.now()-60*1000*60*24*7*2));
        console.log('多久以前-->',date.howLongAgo(Date.now()-60*1000*60*24*7*2*3));
        console.log('多久以前-->',date.howLongAgo('1286845932000'));
        console.log('多久以前-->',date.howLongAgo('2015'));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,515评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,559评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,723评论 1 1
  • 在妖界我有个名头叫胡百晓,无论是何事,只要找到胡百晓即可有解决的办法。因为是只狐狸大家以讹传讹叫我“倾城百晓”,...
    猫九0110阅读 3,256评论 7 3