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