<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
當我們計算兩個日期間的間隔天數時,通常是用結束日期減去開始日期,但在實際的專案管理、任務管理、工作計劃等場景中,某些時間段會涉及雙休日、法定節假日,甚至還有公司自定義的工作時間安排,所以就需要計算出兩個日期間的實際工作日天數。比如一個表格中有多條任務,每條任務都有各自的開始日期、計劃結束日期或實際結束日期,那麼如何自動計算出兩個日期間的實際工作日天數,以便做到精細和量化呢。
此時,萬能的 Python 就可以出場了,而用 Python + SeaTable 來實現則會更加方便工作管理。本文重點分享思路和程式碼,僅供參考。
SeaTable 表格有豐富的資料型別,如日期、單選、共同作業人、公式、按鈕等等,可以方便又規範地管理各類資訊。此外,還有很多基礎功能和擴充套件功能,這其中就包括指令碼功能。在表格上點選“指令碼”按鈕,可以匯入或新建多個指令碼,隨時一鍵執行即可(如需設定定期執行等可在“自動化規則”中實現)。
比如在下面這個表格中,開始時間由專案管理者填寫; 結束時間由每個任務負責人在完成專案時填寫; 工作日(天數)則根據開始時間和結束時間,執行 Python 指令碼計算得出。
具體來看。 首先, 我們開啟指令碼功能, 選擇“新建指令碼”, 選擇 Python。
在開啟的介面中,就可以對指令碼進行編寫了。
在此處計算工作日的指令碼編寫過程中需要注意幾個問題, 以中國為例:
把以上的特殊日期一一列出來,這個指令碼就不難編寫了, 以下給出一些指令碼片段, 以2022年為例。
import datetime from enum import Enum from seatable_api import dateutils, Base, context # 一個 Base 的授權資訊 SERVER_URL = context.server_url or 'https://cloud.seatable.cn' API_TOKEN = context.api_token or 'dd46f9ca0172a850a0922107a6b2e6b99932b040' # 1. 定義中國的節假日概況 class Holiday(Enum): new_years_day = "元旦" spring_festival = "春節" tomb_sweeping_day = "清明" labour_day ="勞動節" dragon_boat_festival = "端午" national_day = "國慶節" mid_autumn_festival = "中秋" # 2. 列出節假日列表, 此處可以去查詢日曆,就不一一列出了 holidays = { datetime.date(year=2022, month=1, day=1): Holiday.new_years_day.value, datetime.date(year=2022, month=1, day=2): Holiday.new_years_day.value, datetime.date(year=2022, month=1, day=3): Holiday.new_years_day.value, datetime.date(year=2022, month=1, day=31): Holiday.spring_festival.value, datetime.date(year=2022, month=2, day=1): Holiday.spring_festival.value, ..... } # 3.列出調休日的列表,及週六日為工作日的列表 workdays = { datetime.date(year=2022, month=1, day=29): Holiday.spring_festival.value, datetime.date(year=2022, month=1, day=30): Holiday.spring_festival.value, datetime.date(year=2022, month=4, day=2): Holiday.tomb_sweeping_day.value, datetime.date(year=2022, month=4, day=24): Holiday.labour_day.value, datetime.date(year=2022, month=5, day=7): Holiday.labour_day.value, datetime.date(year=2022, month=10, day=8): Holiday.national_day.value, datetime.date(year=2022, month=10, day=9): Holiday.national_day.value, .... } # 4. 定義是否是工作日 def is_workday(date): ''' 工作日定義: 1. 日期在workdays字典的key中 2. 星期是週一到週五且不在holidays字典的key中 ''' date = _validate_date(date) weekday = date.weekday() return bool(date in workdays.keys() or (weekday <= 4 and date not in holidays.keys())) # 5. 計算兩個日期之間的工作日, 此處返回的是工作日的列表, 該列表的長度即是工作日的天數 def get_workdays(start, end): """ 獲取兩個日期之間的工作日,返回datetime的列表 """ start, end = _validate_date(start, end) return list(filter(is_workday, get_dates(start, end))) # 6. 將結果寫入 SeaTable def calculate_base_workdays(base, table_name): ''' 通過seatable表格中的,開始日期, 結束日期, 計算兩個日期間工作日的天數,並把其更新到該行的 工作日欄位中 ''' for row in base.list_rows(table_name): row_id = row.get('_id') start_date = row.get("開始日期") end_date = row.get("結束日期") if not (start_date and end_date): continue try: work_day_list = get_workdays(start_date, end_date) # 兩個日期間的工作日天數 work_day_counts = len(work_day_list) cell_value = row.get("工作日") if cell_value == work_day_counts: continue base.update_row( table_name, row_id, { "工作日": work_day_counts } ) except Exception as e: print("start date: %s, end date: %s, error: %s" % (start_date, end_date, e) ) continue base = Base(API_TOKEN, SERVER_URL) base.auth() calculate_base_workdays(base, "工作任務安排")
SeaTable 作為一款以線上協同表格為基礎的新型數位化平臺,功能豐富,使用靈活,能幫我們實現一體化資料管理和處理。當我們需要快速地開發自定義資料處理流程時,就可以使用它完善的 Python API 功能,能節省很多成本。具體到本案例中,除了使用 Python 來計算兩個日期間的工作日外,還可以使用表格的日曆外掛、時間線外掛、高階統計外掛來進行檢視和做視覺化圖表分析,讓專案管理更方便,實現應用更簡單。
到此這篇關於Python+SeaTable實現計算兩個日期間的工作日天數的文章就介紹到這了,更多相關Python SeaTable計算工作日天數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45