JS計(jì)算兩個(gè)時(shí)間間隔

1 前言

1.1 業(yè)務(wù)場(chǎng)景

JavaScript計(jì)算兩個(gè)時(shí)間相隔了 多少年多少月多少日柳击。時(shí)分秒這里不作考慮弥雹。

2 實(shí)現(xiàn)原理

2.1 獲取當(dāng)前時(shí)間

若需要和當(dāng)前時(shí)間比較鹦筹,這里提供當(dāng)前時(shí)間的獲取格式化方法秋秤。我這里是根據(jù)傳入類(lèi)型輸出日期或者日期+時(shí)間介衔,可以明顯看出typeday時(shí)恨胚,輸出日期。

getNowDate(type){
    let now = new Date()
    let year = now.getFullYear()
    let month = now.getMonth() + 1
    let day = now.getDate()
    let hh = now.getHours()
    let mm = now.getMinutes()
    let ss = now.getSeconds()

    month = month < 10 ? '0'+ month : month
    day = day < 10 ? '0'+ day : day

    if(type == 'day'){
      return year +'-'+ month +'-'+ day
    } else {
      return year +'-'+ month +'-'+ day + ' '+ hh + ':' + mm + ':' + ss
    }
},

2.2比較時(shí)間

傳入兩個(gè)參數(shù)炎咖,格式如:2008-08-08

getDiffYmdBetweenDate(sDate1,sDate2){
    var fixDate = function(sDate){
        var aD = sDate.split('-');
        for(var i = 0; i < aD.length; i++){
            aD[i] = fixZero(parseInt(aD[i]));
        }
        return aD.join('-');
    };
      
    var fixZero = function(n){
        return n < 10 ? '0'+n : n;
    };
      
    var fixInt = function(a){
        for(var i = 0; i < a.length; i++){
            a[i] = parseInt(a[i]);
        }
        return a;
    };
      
    var getMonthDays = function(y,m){
        var aMonthDays = [0,31,28,31,30,31,30,31,31,30,31,30,31];
        if((y%400 == 0) || (y%4==0 && y%100!=0)){
            aMonthDays[2] = 29;
        }
        return aMonthDays[m];
    };
      
    var checkDate = function(sDate){
    };
    var y = 0;
    var m = 0;
    var d = 0;
    var sTmp;
    var aTmp;
    sDate1 = fixDate(sDate1);
    sDate2 = fixDate(sDate2);
    if(sDate1 > sDate2){
        return 'past'
    }
    var aDate1 = sDate1.split('-');
    aDate1 = fixInt(aDate1);
    var aDate2 = sDate2.split('-');
    aDate2 = fixInt(aDate2);
    //計(jì)算相差的年份
    /*aTmp = [aDate1[0]+1,fixZero(aDate1[1]),fixZero(aDate1[2])];
    while(aTmp.join('-') <= sDate2){
        y++;
        aTmp[0]++;
    }*/
    y = aDate2[0] - aDate1[0];
    if( sDate2.replace(aDate2[0],'') < sDate1.replace(aDate1[0],'')){
        y = y - 1;
    }
    //計(jì)算月份
    aTmp = [aDate1[0]+y,aDate1[1],fixZero(aDate1[2])];
    while(true){
        if(aTmp[1] == 12){
            aTmp[0]++;
            aTmp[1] = 1;
        }else{
            aTmp[1]++;
        }
        if(([aTmp[0],fixZero(aTmp[1]),aTmp[2]]).join('-') <= sDate2){
            m++;
        } else {
            break;
        }
    }
    //計(jì)算天數(shù)
    aTmp = [aDate1[0]+y,aDate1[1]+m,aDate1[2]];
    if(aTmp[1] > 12){
        aTmp[0]++;
        aTmp[1] -= 12;
    }
    while(true){
        if(aTmp[2] == getMonthDays(aTmp[0],aTmp[1])){
            aTmp[1]++;
            aTmp[2] = 1;
        } else {
            aTmp[2]++;
        }
        sTmp = ([aTmp[0],fixZero(aTmp[1]),fixZero(aTmp[2])]).join('-');
        if(sTmp <= sDate2){
            d++;
        } else {
            break;
        }
    }
    return {y:y,m:m,d:d}
},

返回的結(jié)果是一個(gè)對(duì)象赃泡,包含了y m d三個(gè)屬性,可根據(jù)業(yè)務(wù)進(jìn)行取用展示乘盼。

比較時(shí)間的時(shí)候升熊,若sDate1為小的時(shí)間,這里直接返回past绸栅。

2.3 頁(yè)面展示

這里根據(jù)業(yè)務(wù)不同可以作不同的展示级野。這里列出自己的Vue展示處理展示。

其中this.dataForm.hasdata為頁(yè)面的v-model粹胯。這樣的處理的效果是觀看直觀蓖柔。

let now = this.getNowDate('day')
let diffDate = this.getDiffYmdBetweenDate(now,this.data)
let hasdata = ''

if(diffDate == 'past'){
    this.dataForm.hasdata = '已過(guò)期'
} else {
    if(diffDate.y > 0){
        hasdata += diffDate.y + '年' + diffDate.m + '月'
    } else if (diffDate.y == 0) {
        if(diffDate.m > 0){
            hasdata += diffDate.m + '月'
        }
    }
    this.dataForm.hasdata = hasdata + diffDate.d + '日'
}

2.4 頁(yè)面效果

image

image

image

3 后記

感謝支持辰企。若不足之處,歡迎大家指出,共勉。

如果覺(jué)得不錯(cuò)劳吠,記得 點(diǎn)贊 ,謝謝大家 ??

歡迎關(guān)注 我的: 【Github】【掘金】【簡(jiǎn)書(shū)】【CSDN】【OSCHINA】【SF】

3.1 參考資料

3.2 時(shí)間處理js庫(kù)

這里列舉幾個(gè)js庫(kù)備查找使用十减,排序無(wú)意義。

  • moment
  • day
  • date-fns
  • miment

本文章采用 知識(shí)共享署名-非商業(yè)性使用-相同方式共享 4.0 國(guó)際許可協(xié)議 進(jìn)行許可愤估。

出處為:https://github.com/xrkffgg/Tools

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帮辟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子玩焰,更是在濱河造成了極大的恐慌由驹,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔园,死亡現(xiàn)場(chǎng)離奇詭異蔓榄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)默刚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)甥郑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人荤西,你說(shuō)我怎么就攤上這事澜搅。” “怎么了邪锌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵勉躺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我觅丰,道長(zhǎng)饵溅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任妇萄,我火速辦了婚禮蜕企,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚣伐。我一直安慰自己糖赔,他們只是感情好萍丐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布轩端。 她就那樣靜靜地躺著,像睡著了一般逝变。 火紅的嫁衣襯著肌膚如雪基茵。 梳的紋絲不亂的頭發(fā)上奋构,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音拱层,去河邊找鬼弥臼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛根灯,可吹牛的內(nèi)容都是我干的径缅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼烙肺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纳猪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起桃笙,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤氏堤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后搏明,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鼠锈,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年星著,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了购笆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虚循,死狀恐怖由桌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邮丰,我是刑警寧澤行您,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站剪廉,受9級(jí)特大地震影響娃循,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斗蒋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一捌斧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泉沾,春花似錦捞蚂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春丁存,著一層夾襖步出監(jiān)牢的瞬間肩杈,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工解寝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扩然,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓聋伦,卻偏偏與公主長(zhǎng)得像夫偶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子觉增,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348