摘要:本來想是想找輪子的,但是并沒有找到能用的,多數(shù)都是問題很大,所以就自己寫了一個需求說明支持自選時間段,即開始時間與結(jié)束時間根據(jù)用戶的上班及下班時間判定返回小時數(shù)技術(shù)棧思考過程怎么說呢,其實這個邏輯不是很復雜主要是確定起始時間結(jié)束時間與打卡上
本來想是想找輪子的,但是并沒有找到能用的,多數(shù)都是問題很大,所以就自己寫了一個
需求說明支持自選時間段,即開始時間與結(jié)束時間
根據(jù)用戶的上班及下班時間判定
返回小時數(shù)
moment.js
思考過程怎么說呢,其實這個邏輯不是很復雜
主要是確定起始時間、結(jié)束時間與打卡上班時間、打卡下班時間的關系問題
起始時間<上班時間 ---> 將begindate設置成上班時間
起始時間>下班時間 ---> 將begindate設置成上班時間 并且日期+1
結(jié)束時間>下班時間 ---> 將enddate設置成下班時間
結(jié)束時間<上班時間 ---> 將begindate設置成上班時間 并且日期-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; //獲取開始時間和結(jié)束時間 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)))) { //開始時間小于st,設置為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é)束時間大于et,設置為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")) { //開始時間和結(jié)束時間是同一天,結(jié)束時間-開始時間 _totalHour += _endDate.diff(_beginDate, "hours", true); _DateTime.add(1, "d"); continue; } else { //開始時間和結(jié)束時間不是同一天,et-st _totalHour += moment(dax).diff(das, "hours", true); _DateTime.add(1, "d"); continue; } } else if (moment(_DateTime).isSame(_endDate, "day")) { //是否和結(jié)束時間是同一天,結(jié)束時間-開始時間st, _totalHour += _endDate.diff(moment(_endDate).hour(das.h).minute(das.m), "hours", true); _DateTime.add(1, "d"); continue; } else { //工時 _totalHour += moment.duration(moment(dax)-moment(das)).as("hours"); _DateTime.add(1, "d"); continue; } } console.log("總計", _totalHour) return _totalHour }
細節(jié)處可能還有瑕疵,歡迎討論
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96490.html
摘要:本來想是想找輪子的,但是并沒有找到能用的,多數(shù)都是問題很大,所以就自己寫了一個需求說明支持自選時間段,即開始時間與結(jié)束時間根據(jù)用戶的上班及下班時間判定返回小時數(shù)技術(shù)棧思考過程怎么說呢,其實這個邏輯不是很復雜主要是確定起始時間結(jié)束時間與打卡上 本來想是想找輪子的,但是并沒有找到能用的,多數(shù)都是問題很大,所以就自己寫了一個 需求說明 支持自選時間段,即開始時間與結(jié)束時間根據(jù)用戶的上班及下班...
摘要:計費模式云主機支持以下幾種計費方式按年,按月,按時均為預付費按年以年為計費周期支付訂單。續(xù)費有效期過期產(chǎn)品的續(xù)費。二按時預付費云主機過期后當天發(fā)送已過期提醒過期第天發(fā)送資源即將被回收通知過期后第天發(fā)送回收通知,并回收主機。UHost計費模式1、云主機UHost支持以下幾種計費方式:按年,按月,按時(均為預付費)按年:以年為計費周期支付訂單。享受每年訂單減免2個月費用的優(yōu)惠。按月:以月為計費周...
摘要:計費說明云主機產(chǎn)品目前支持按年按月按時預付費和按時后付費四種計費方式。此外,云盤費用與主機開關機狀態(tài)無關,按照完整的小時計費。舉例用戶于購買成功后付費云主機,系統(tǒng)將于生成時間段內(nèi)的后付費訂單,并以此類推。什么是云主機云主機提供可隨時擴展的計算服務,每臺云主機以虛擬機的形式運行,主機資源包含CPU、內(nèi)存、磁盤等最基礎的計算組件。云主機是UCloud最為核心的服務,有些服務,如IP、鏡像、云硬盤...
閱讀 1997·2021-11-24 09:39
閱讀 990·2021-11-11 16:55
閱讀 1447·2021-10-09 09:43
閱讀 1433·2021-10-08 10:17
閱讀 1664·2021-08-25 09:41
閱讀 436·2019-08-30 13:02
閱讀 638·2019-08-29 15:14
閱讀 1016·2019-08-29 13:53