成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

JS 獲取一段時(shí)間內(nèi)的工作時(shí)長(zhǎng)小時(shí)數(shù)

alexnevsky / 638人閱讀

摘要:本來(lái)想是想找輪子的,但是并沒(méi)有找到能用的,多數(shù)都是問(wèn)題很大,所以就自己寫(xiě)了一個(gè)需求說(shuō)明支持自選時(shí)間段,即開(kāi)始時(shí)間與結(jié)束時(shí)間根據(jù)用戶的上班及下班時(shí)間判定返回小時(shí)數(shù)技術(shù)棧思考過(guò)程怎么說(shuō)呢,其實(shí)這個(gè)邏輯不是很復(fù)雜主要是確定起始時(shí)間結(jié)束時(shí)間與打卡上

本來(lái)想是想找輪子的,但是并沒(méi)有找到能用的,多數(shù)都是問(wèn)題很大,所以就自己寫(xiě)了一個(gè)

需求說(shuō)明

支持自選時(shí)間段,即開(kāi)始時(shí)間與結(jié)束時(shí)間
根據(jù)用戶的上班及下班時(shí)間判定
返回小時(shí)數(shù)

技術(shù)棧

moment.js

思考過(guò)程

怎么說(shuō)呢,其實(shí)這個(gè)邏輯不是很復(fù)雜
主要是確定起始時(shí)間、結(jié)束時(shí)間與打卡上班時(shí)間、打卡下班時(shí)間的關(guān)系問(wèn)題
起始時(shí)間<上班時(shí)間 ---> 將begindate設(shè)置成上班時(shí)間
起始時(shí)間>下班時(shí)間 ---> 將begindate設(shè)置成上班時(shí)間 并且日期+1
結(jié)束時(shí)間>下班時(shí)間 ---> 將enddate設(shè)置成下班時(shí)間
結(jié)束時(shí)間<上班時(shí)間 ---> 將begindate設(shè)置成上班時(shí)間 并且日期-1

然后就是判斷是不是工作日了
起始是否同一天
大概思路就是這樣 嗯

/**
   * 
   * @param {*} st start 2018-02-02 12:00
   * @param {*} et end  2018-02-02 12:00
   * @param {*} das 打卡上班  10:00:00  格式必須
   * @param {*} dax 打卡下班  10:00:00  格式必須
   */
    GetWorkHours( st, et, das, dax) {
        var  das = {h:das.substr(0,2),m:das.substr(3,2),s:das.substr(6,2)}
        var  dax = {h:dax.substr(0,2),m:dax.substr(3,2),s:dax.substr(6,2)}
        var _totalHour = 0;
        //獲取開(kāi)始時(shí)間和結(jié)束時(shí)間
        var _beginDate = moment(st);
        var _endDate = moment(et);
        var _begin = {y:_beginDate.year(),M:_beginDate.month(),d:_beginDate.date()}
        var _end = {y:_endDate.year(),M:_endDate.month(),d:_endDate.date()}
        //整理
        if (_beginDate.isBefore(moment(Object.assign({},_begin,das)))) {
            //開(kāi)始時(shí)間小于st,設(shè)置為st
            _beginDate.hour(das.h).minute(das.m);
        } else if (_beginDate.isAfter(moment(Object.assign({},_begin,dax)))) {
            _beginDate.add(1, "d").hour(das.h).minute(das.m);
        }
        if (_endDate.isAfter(moment(Object.assign({},_end,dax)))) {
            //結(jié)束時(shí)間大于et,設(shè)置為et
            _endDate.hour(dax.h).minute(dax.m);
        } else if (_endDate.isBefore(moment(Object.assign({},_begin,das)))) {
            _beginDate.add(-1, "d").hour(das.h).minute(das.m);
        }
        var _DateTime = _beginDate;
        while (moment(_DateTime).isSameOrBefore(_endDate, "day")) {
            //判斷是否周日,周六
            var _week = moment(_DateTime).weekday();
            if (_week == 0 || _week == 6) {
                _DateTime.add(1, "d");
                continue;
            }
            if (moment(_DateTime).isSame(_beginDate, "day")) {
                if (moment(_DateTime).isSame(_endDate, "day")) {
                    //開(kāi)始時(shí)間和結(jié)束時(shí)間是同一天,結(jié)束時(shí)間-開(kāi)始時(shí)間
                    _totalHour += _endDate.diff(_beginDate, "hours", true);
                    _DateTime.add(1, "d");
                    continue;
                } else {
                    //開(kāi)始時(shí)間和結(jié)束時(shí)間不是同一天,et-st
                    _totalHour += moment(dax).diff(das, "hours", true);
                    _DateTime.add(1, "d");
                    continue;
                }
            } else if (moment(_DateTime).isSame(_endDate, "day")) {
                //是否和結(jié)束時(shí)間是同一天,結(jié)束時(shí)間-開(kāi)始時(shí)間st,
                _totalHour += _endDate.diff(moment(_endDate).hour(das.h).minute(das.m), "hours", true);
                _DateTime.add(1, "d");
                continue;
            } else {
                //工時(shí)
                _totalHour += moment.duration(moment(dax)-moment(das)).as("hours");
                _DateTime.add(1, "d");
                continue;
            }
        }
        console.log("總計(jì)", _totalHour)
        return _totalHour 
    }

細(xì)節(jié)處可能還有瑕疵,歡迎討論

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/52752.html

相關(guān)文章

  • JS 獲取一段時(shí)間內(nèi)的工作時(shí)長(zhǎng)時(shí)數(shù)

    摘要:本來(lái)想是想找輪子的,但是并沒(méi)有找到能用的,多數(shù)都是問(wèn)題很大,所以就自己寫(xiě)了一個(gè)需求說(shuō)明支持自選時(shí)間段,即開(kāi)始時(shí)間與結(jié)束時(shí)間根據(jù)用戶的上班及下班時(shí)間判定返回小時(shí)數(shù)技術(shù)棧思考過(guò)程怎么說(shuō)呢,其實(shí)這個(gè)邏輯不是很復(fù)雜主要是確定起始時(shí)間結(jié)束時(shí)間與打卡上 本來(lái)想是想找輪子的,但是并沒(méi)有找到能用的,多數(shù)都是問(wèn)題很大,所以就自己寫(xiě)了一個(gè) 需求說(shuō)明 支持自選時(shí)間段,即開(kāi)始時(shí)間與結(jié)束時(shí)間根據(jù)用戶的上班及下班...

    willin 評(píng)論0 收藏0
  • 【云主機(jī) UHost】購(gòu)買(mǎi)指導(dǎo):計(jì)費(fèi)模式、配置變更、續(xù)費(fèi)和回收

    摘要:計(jì)費(fèi)模式云主機(jī)支持以下幾種計(jì)費(fèi)方式按年,按月,按時(shí)均為預(yù)付費(fèi)按年以年為計(jì)費(fèi)周期支付訂單。續(xù)費(fèi)有效期過(guò)期產(chǎn)品的續(xù)費(fèi)。二按時(shí)預(yù)付費(fèi)云主機(jī)過(guò)期后當(dāng)天發(fā)送已過(guò)期提醒過(guò)期第天發(fā)送資源即將被回收通知過(guò)期后第天發(fā)送回收通知,并回收主機(jī)。UHost計(jì)費(fèi)模式1、云主機(jī)UHost支持以下幾種計(jì)費(fèi)方式:按年,按月,按時(shí)(均為預(yù)付費(fèi))按年:以年為計(jì)費(fèi)周期支付訂單。享受每年訂單減免2個(gè)月費(fèi)用的優(yōu)惠。按月:以月為計(jì)費(fèi)周...

    Tecode 評(píng)論0 收藏0
  • 【云主機(jī) UHost】產(chǎn)品簡(jiǎn)介:什么是云主機(jī)?UHost產(chǎn)品優(yōu)勢(shì),功能簡(jiǎn)介與計(jì)費(fèi)說(shuō)明

    摘要:計(jì)費(fèi)說(shuō)明云主機(jī)產(chǎn)品目前支持按年按月按時(shí)預(yù)付費(fèi)和按時(shí)后付費(fèi)四種計(jì)費(fèi)方式。此外,云盤(pán)費(fèi)用與主機(jī)開(kāi)關(guān)機(jī)狀態(tài)無(wú)關(guān),按照完整的小時(shí)計(jì)費(fèi)。舉例用戶于購(gòu)買(mǎi)成功后付費(fèi)云主機(jī),系統(tǒng)將于生成時(shí)間段內(nèi)的后付費(fèi)訂單,并以此類(lèi)推。什么是云主機(jī)云主機(jī)提供可隨時(shí)擴(kuò)展的計(jì)算服務(wù),每臺(tái)云主機(jī)以虛擬機(jī)的形式運(yùn)行,主機(jī)資源包含CPU、內(nèi)存、磁盤(pán)等最基礎(chǔ)的計(jì)算組件。云主機(jī)是UCloud最為核心的服務(wù),有些服務(wù),如IP、鏡像、云硬盤(pán)...

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<