摘要:本來(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ù)
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/96490.html
摘要:本來(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ù)用戶的上班及下班...
摘要:計(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)周...
摘要:計(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)訂單,并以此類推。什么是云主機(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)...
閱讀 1996·2021-11-24 09:39
閱讀 989·2021-11-11 16:55
閱讀 1442·2021-10-09 09:43
閱讀 1430·2021-10-08 10:17
閱讀 1664·2021-08-25 09:41
閱讀 435·2019-08-30 13:02
閱讀 637·2019-08-29 15:14
閱讀 1014·2019-08-29 13:53