最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在js中計(jì)算兩個(gè)時(shí)間段重疊的時(shí)長(zhǎng)問題詳解

 更新時(shí)間:2024年04月29日 09:56:40   作者:流年五十前  
這篇文章主要給大家介紹了關(guān)于如何在js中計(jì)算兩個(gè)時(shí)間段重疊的時(shí)長(zhǎng)問題的相關(guān)資料,判斷兩個(gè)時(shí)間段是否重疊可以通過比較兩個(gè)時(shí)間段的開始時(shí)間和結(jié)束時(shí)間來實(shí)現(xiàn),文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下

前言

最近遇到一個(gè)需求,就是在js中計(jì)算兩段時(shí)間的重疊時(shí)長(zhǎng)問題,這里記錄一下。

一、過程分析

兩段時(shí)間的重疊問題,一般有3中情況

  • 兩段時(shí)間完全無重疊,也就是無任何交集
  • 兩段時(shí)間有交叉
  • 兩段時(shí)間有包含關(guān)系

為了弄清楚這個(gè)關(guān)系,我畫了一張圖來說明:

根據(jù)這張圖上的內(nèi)容,我們可以按照步驟來逐個(gè)實(shí)現(xiàn)。

  • 第一種情況,明顯沒有重疊,所以為0
  • 第二種情況,交叉情況下可能的結(jié)果是:end1-start2或者end2-start1
  • 第三種情況,包含關(guān)系下可能的結(jié)果是:end2-start2或者end1-start1

根據(jù)上面的分析,我們可以直接寫代碼

二、實(shí)現(xiàn)代碼(js)

JavaScript處理日期我推薦一個(gè)插件庫(kù)【Moment.js】點(diǎn)擊官網(wǎng)

使用這個(gè)工具我們就能很輕松處理日期的各種操作。代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
</head>
<body>
<script>
    //兩個(gè)時(shí)間段重復(fù)的時(shí)段,返回秒數(shù)
    //傳入兩個(gè)數(shù)組
    function bw(times1,times2){
        if(!Array.isArray(times1) || !Array.isArray(times2) || times1.length!=2 || times2.length!=2){
            console.log('參數(shù)錯(cuò)誤1')
            return 0;
        }
        var start1=moment(times1[0]);
        var end1=moment(times1[1]);
        var start2=moment(times2[0]);
        var end2=moment(times2[1]);

        if(!start1.isValid() || !end1.isValid() || !start2.isValid() || !end2.isValid()){
            console.log('參數(shù)錯(cuò)誤2')
            return 0;
        }

        //先判斷數(shù)據(jù)正確性
        if(start1.isAfter(end1) || start2.isAfter(end2)){
            console.log('時(shí)間范圍不正確')
            return 0;
        }
        //第一種情況
        if(end1.isSameOrBefore(start2) || end2.isSameOrBefore(start1)) {
            console.log('兩段時(shí)間無交叉')
            return 0;
        }
        //第二種情況:1,這種情況就是end1-start2
        if(start1.isSameOrBefore(start2) && end1.isSameOrBefore(end2) && start2.isSameOrBefore(end1)){
            var duration = moment.duration(end1.diff(start2))
            //duration.as('hours');
            //duration.as('minutes');
            //duration.as('seconds');
            //duration.as('milliseconds');
            console.log('交叉情況1')
            return duration.as('seconds')
        }
        //第二種情況:2,這種情況就是end2-start1
        if(start2.isSameOrBefore(start1) && end2.isSameOrBefore(end1) && start1.isSameOrBefore(end2)){
            var duration = moment.duration(end2.diff(start1))
            //duration.as('hours');
            //duration.as('minutes');
            //duration.as('seconds');
            //duration.as('milliseconds');
            console.log('交叉情況2')
            return duration.as('seconds')
        }
        //第三種情況:1,time1包含time2 這是就是:end2-start2
        if(start1.isSameOrBefore(start2) && end2.isSameOrBefore(end1)){
            var duration = moment.duration(end2.diff(start2))
            //duration.as('hours');
            //duration.as('minutes');
            //duration.as('seconds');
            //duration.as('milliseconds');
            console.log('包含情況1')
            return duration.as('seconds')
        }
         //第三種情況:2,time2包含time1 這是就是:end1-start1
        if(start2.isSameOrBefore(start1) && end1.isSameOrBefore(end2)){
            var duration = moment.duration(end1.diff(start1))
            //duration.as('hours');
            //duration.as('minutes');
            //duration.as('seconds');
            //duration.as('milliseconds');
            console.log('包含情況2')
            return duration.as('seconds')
        }
        console.log('未匹配到任何模式')
        return 0
    }
    //測(cè)試
    //1、數(shù)據(jù)正確性
    console.log(bw(['2024-01-01 00:03:01','2024-01-01 00:01:01'],['2024-01-01 00:00:50','2024-01-01 00:01:55']))
    //2、兩段時(shí)間無交叉
    console.log(bw(['2024-01-01 00:01:01','2024-01-01 00:01:01'],['2024-01-02 00:00:50','2024-01-02 00:01:55']))
    //3、交叉情況1
    console.log(bw(['2024-01-01 00:00:01','2024-01-01 00:01:01'],['2024-01-01 00:00:50','2024-01-01 00:01:55']))
    //4、交叉情況2
    console.log(bw(['2024-01-01 00:00:50','2024-01-01 00:01:55'],['2024-01-01 00:00:01','2024-01-01 00:01:01']))
    //5、包含情況1
    console.log(bw(['2024-01-01 00:00:01','2024-01-01 00:01:55'],['2024-01-01 00:00:50','2024-01-01 00:01:01']))
    //6、包含情況2
    console.log(bw(['2024-01-01 00:00:50','2024-01-01 00:01:01'],['2024-01-01 00:00:01','2024-01-01 00:01:55']))

</script>
</body>
</html>

上面代碼測(cè)試結(jié)果為:

總結(jié)

到此這篇關(guān)于如何在js中計(jì)算兩個(gè)時(shí)間段重疊的時(shí)長(zhǎng)問題詳解的文章就介紹到這了,更多相關(guān)js計(jì)算時(shí)間段重疊時(shí)長(zhǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS簡(jiǎn)單實(shí)現(xiàn)浮動(dòng)窗口效果示例

    JS簡(jiǎn)單實(shí)現(xiàn)浮動(dòng)窗口效果示例

    這篇文章主要介紹了JS簡(jiǎn)單實(shí)現(xiàn)浮動(dòng)窗口效果,涉及javascript操作浮動(dòng)窗口的創(chuàng)建、打開、關(guān)閉等相關(guān)操作技巧,需要的朋友可以參考下
    2016-09-09
  • JavaScript如何捕獲async/await中的錯(cuò)誤詳解

    JavaScript如何捕獲async/await中的錯(cuò)誤詳解

    在JavaScript中async/await語法簡(jiǎn)化了異步操作,但錯(cuò)誤處理需要特別注意,這篇文章主要給大家介紹了關(guān)于JavaScript如何捕獲async/await中錯(cuò)誤的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10
  • JS圖像無縫滾動(dòng)腳本非常好用

    JS圖像無縫滾動(dòng)腳本非常好用

    最好用的JS圖像無縫滾動(dòng)腳本,根據(jù)需要改改寬度和圖像個(gè)數(shù)就可以了,需要的朋友可以參考下
    2014-02-02
  • 詳解ES6語法之可迭代協(xié)議和迭代器協(xié)議

    詳解ES6語法之可迭代協(xié)議和迭代器協(xié)議

    這篇文章主要介紹了詳解ES6語法之可迭代協(xié)議和迭代器協(xié)議,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • js 本地預(yù)覽的簡(jiǎn)單實(shí)現(xiàn)方法

    js 本地預(yù)覽的簡(jiǎn)單實(shí)現(xiàn)方法

    本篇文章主要是對(duì)js本地預(yù)覽的簡(jiǎn)單實(shí)現(xiàn)方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • javascript實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條

    javascript實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條

    本文給大家分享2個(gè)javascript實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條,一個(gè)是個(gè)人制作一個(gè)是網(wǎng)友實(shí)現(xiàn)的,都很不錯(cuò),這里推薦給大家。
    2015-07-07
  • js css+html實(shí)現(xiàn)簡(jiǎn)單的日歷

    js css+html實(shí)現(xiàn)簡(jiǎn)單的日歷

    這篇文章主要為大家詳細(xì)介紹了由html、css、javascript結(jié)合實(shí)現(xiàn)的簡(jiǎn)單日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 一文詳解如何在uniapp中設(shè)置隱私政策彈窗

    一文詳解如何在uniapp中設(shè)置隱私政策彈窗

    在將uniapp打包成APP端時(shí),上架到應(yīng)用市場(chǎng)的時(shí)候需要配置隱私彈窗,下面這篇文章主要給大家介紹了關(guān)于如何在uniapp中設(shè)置隱私政策彈窗的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 另類網(wǎng)頁中添加運(yùn)行效果

    另類網(wǎng)頁中添加運(yùn)行效果

    另類網(wǎng)頁中添加運(yùn)行效果...
    2006-12-12
  • 從Immutable.js到Redux函數(shù)式編程

    從Immutable.js到Redux函數(shù)式編程

    這篇文章主要為大家介紹了從Immutable.js到Redux函數(shù)式編程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論

乌兰浩特市| 虹口区| 电白县| 屯昌县| 阳曲县| 长顺县| 旬阳县| 那曲县| 河曲县| 广昌县| 临漳县| 漳州市| 安陆市| 西乌珠穆沁旗| 隆德县| 横峰县| 电白县| 崇文区| 余庆县| 金坛市| 卓资县| 西吉县| 和平区| 固原市| 东乌| 镶黄旗| 秦皇岛市| 中江县| 元江| 阳信县| 水城县| 抚顺县| 呼玛县| 合阳县| 田东县| 长沙市| 安多县| 井冈山市| 沙湾县| 呈贡县| 安宁市|