欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+SeaTable實(shí)現(xiàn)計(jì)算兩個(gè)日期間的工作日天數(shù)

 更新時(shí)間:2022年07月06日 15:34:28   作者:SeaTable開(kāi)發(fā)者版  
在實(shí)際的項(xiàng)目管理、任務(wù)管理、工作計(jì)劃等場(chǎng)景中,某些時(shí)間段會(huì)涉及雙休日、法定節(jié)假日,甚至還有公司自定義的工作時(shí)間安排,所以就需要計(jì)算出兩個(gè)日期間的實(shí)際工作日天數(shù)。本文用Python+SeaTable實(shí)現(xiàn)這一需求,需要的可以參考一下

當(dāng)我們計(jì)算兩個(gè)日期間的間隔天數(shù)時(shí),通常是用結(jié)束日期減去開(kāi)始日期,但在實(shí)際的項(xiàng)目管理、任務(wù)管理、工作計(jì)劃等場(chǎng)景中,某些時(shí)間段會(huì)涉及雙休日、法定節(jié)假日,甚至還有公司自定義的工作時(shí)間安排,所以就需要計(jì)算出兩個(gè)日期間的實(shí)際工作日天數(shù)。比如一個(gè)表格中有多條任務(wù),每條任務(wù)都有各自的開(kāi)始日期、計(jì)劃結(jié)束日期或?qū)嶋H結(jié)束日期,那么如何自動(dòng)計(jì)算出兩個(gè)日期間的實(shí)際工作日天數(shù),以便做到精細(xì)和量化呢。

此時(shí),萬(wàn)能的 Python 就可以出場(chǎng)了,而用 Python + SeaTable 來(lái)實(shí)現(xiàn)則會(huì)更加方便工作管理。本文重點(diǎn)分享思路和代碼,僅供參考。

SeaTable 表格有豐富的數(shù)據(jù)類(lèi)型,如日期、單選、協(xié)作人、公式、按鈕等等,可以方便又規(guī)范地管理各類(lèi)信息。此外,還有很多基礎(chǔ)功能和擴(kuò)展功能,這其中就包括腳本功能。在表格上點(diǎn)擊“腳本”按鈕,可以導(dǎo)入或新建多個(gè)腳本,隨時(shí)一鍵運(yùn)行即可(如需設(shè)置定期運(yùn)行等可在“自動(dòng)化規(guī)則”中實(shí)現(xiàn))。

比如在下面這個(gè)表格中,開(kāi)始時(shí)間由項(xiàng)目管理者填寫(xiě); 結(jié)束時(shí)間由每個(gè)任務(wù)負(fù)責(zé)人在完成項(xiàng)目時(shí)填寫(xiě); 工作日(天數(shù))則根據(jù)開(kāi)始時(shí)間和結(jié)束時(shí)間,運(yùn)行 Python 腳本計(jì)算得出。

在 SeaTable 表格上新建 Python 腳本

具體來(lái)看。 首先, 我們打開(kāi)腳本功能, 選擇“新建腳本”, 選擇 Python。

思路

在打開(kāi)的界面中,就可以對(duì)腳本進(jìn)行編寫(xiě)了。

在此處計(jì)算工作日的腳本編寫(xiě)過(guò)程中需要注意幾個(gè)問(wèn)題, 以中國(guó)為例:

  • 來(lái)年的工作日、休息日,暫不支持(因國(guó)家暫未發(fā)布安排) 。
  • 需要定義平日中休息的日期, 即周一到周五哪天休息。
  • 需要定義周末中工作的日期, 即周六、周日哪天調(diào)休。

代碼

把以上的特殊日期一一列出來(lái),這個(gè)腳本就不難編寫(xiě)了, 以下給出一些腳本片段, 以2022年為例。

import datetime
from enum import Enum
from seatable_api import dateutils, Base, context

# 一個(gè) Base 的授權(quán)信息
SERVER_URL = context.server_url or 'https://cloud.seatable.cn'
API_TOKEN = context.api_token or 'dd46f9ca0172a850a0922107a6b2e6b99932b040'

# 1. 定義中國(guó)的節(jié)假日概況
class Holiday(Enum):
    new_years_day = "元旦"
    spring_festival = "春節(jié)"
    tomb_sweeping_day = "清明"
    labour_day ="勞動(dòng)節(jié)"
    dragon_boat_festival = "端午"
    national_day = "國(guó)慶節(jié)"
    mid_autumn_festival = "中秋"

# 2. 列出節(jié)假日列表, 此處可以去查詢(xún)?nèi)諝v,就不一一列出了
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.列出調(diào)休日的列表,及周六日為工作日的列表
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. 計(jì)算兩個(gè)日期之間的工作日, 此處返回的是工作日的列表, 該列表的長(zhǎng)度即是工作日的天數(shù)
def get_workdays(start, end):
    """
    獲取兩個(gè)日期之間的工作日,返回datetime的列表
    """
    start, end = _validate_date(start, end)
    return list(filter(is_workday, get_dates(start, end)))
    
# 6. 將結(jié)果寫(xiě)入 SeaTable

def calculate_base_workdays(base, table_name):
    '''
    通過(guò)seatable表格中的,開(kāi)始日期, 結(jié)束日期, 計(jì)算兩個(gè)日期間工作日的天數(shù),并把其更新到該行的
    工作日字段中
    '''

    for row in base.list_rows(table_name):
        row_id = row.get('_id')
        start_date = row.get("開(kāi)始日期")
        end_date = row.get("結(jié)束日期")
        if not (start_date and end_date):
            continue
        try:
            work_day_list = get_workdays(start_date, end_date)
            # 兩個(gè)日期間的工作日天數(shù)
            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, "工作任務(wù)安排")

總結(jié)

SeaTable 作為一款以在線(xiàn)協(xié)同表格為基礎(chǔ)的新型數(shù)字化平臺(tái),功能豐富,使用靈活,能幫我們實(shí)現(xiàn)一體化數(shù)據(jù)管理和處理。當(dāng)我們需要快速地開(kāi)發(fā)自定義數(shù)據(jù)處理流程時(shí),就可以使用它完善的 Python API 功能,能節(jié)省很多成本。具體到本案例中,除了使用 Python 來(lái)計(jì)算兩個(gè)日期間的工作日外,還可以使用表格的日歷插件、時(shí)間線(xiàn)插件、高級(jí)統(tǒng)計(jì)插件來(lái)進(jìn)行查看和做可視化圖表分析,讓項(xiàng)目管理更方便,實(shí)現(xiàn)應(yīng)用更簡(jiǎn)單。

到此這篇關(guān)于Python+SeaTable實(shí)現(xiàn)計(jì)算兩個(gè)日期間的工作日天數(shù)的文章就介紹到這了,更多相關(guān)Python SeaTable計(jì)算工作日天數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python作用域(局部?全局)及global關(guān)鍵字使用詳解

    Python作用域(局部?全局)及global關(guān)鍵字使用詳解

    這篇文章主要為大家介紹了Python作用域(局部?全局)及global關(guān)鍵字使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • django模型動(dòng)態(tài)修改參數(shù),增加 filter 字段的方式

    django模型動(dòng)態(tài)修改參數(shù),增加 filter 字段的方式

    這篇文章主要介紹了django模型動(dòng)態(tài)修改參數(shù),增加 filter 字段的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • pytest進(jìn)階教程之fixture函數(shù)詳解

    pytest進(jìn)階教程之fixture函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于pytest進(jìn)階教程之fixture函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python使用matplotlib繪制圓形代碼實(shí)例

    Python使用matplotlib繪制圓形代碼實(shí)例

    這篇文章主要介紹了Python使用matplotlib繪制圓形代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)生成excel報(bào)表的方法示例

    Python實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)生成excel報(bào)表的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)生成excel報(bào)表的方法,結(jié)合完整實(shí)例形式分析了Python連接、查詢(xún)mysql數(shù)據(jù)庫(kù)并導(dǎo)出Excel報(bào)表的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • Python中的賦值、淺拷貝、深拷貝介紹

    Python中的賦值、淺拷貝、深拷貝介紹

    這篇文章主要介紹了Python中的賦值、淺拷貝、深拷貝介紹,Python中也分為簡(jiǎn)單賦值、淺拷貝、深拷貝這幾種“拷貝”方式,需要的朋友可以參考下
    2015-03-03
  • 分析運(yùn)行中的 Python 進(jìn)程詳細(xì)解析

    分析運(yùn)行中的 Python 進(jìn)程詳細(xì)解析

    這篇文章主要介紹了分析運(yùn)行中的 Python 進(jìn)程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • 一文詳解Python中itertools模塊的使用方法

    一文詳解Python中itertools模塊的使用方法

    itertools是python內(nèi)置的模塊,使用簡(jiǎn)單且功能強(qiáng)大。這篇文章主要為大家詳細(xì)介紹了itertools模塊的使用方法,感興趣的小伙伴可以了解一下
    2023-03-03
  • TensorFlow:將ckpt文件固化成pb文件教程

    TensorFlow:將ckpt文件固化成pb文件教程

    今天小編就為大家分享一篇TensorFlow:將ckpt文件固化成pb文件教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 徹底弄懂Python中的回調(diào)函數(shù)(callback)

    徹底弄懂Python中的回調(diào)函數(shù)(callback)

    回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中回調(diào)函數(shù)(callback)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06

最新評(píng)論