某個合約要用到計算兩個日期間有幾個工作天的功能,那就來寫一個小程式。
記錄一下。
App Inventor學習記錄166-工作天計算器,計算兩個日期間有幾個工作天
這次範例的完成品如下。
在畫面的右上,有 2個日期選擇器,分別用於選擇合約開始日期,以及合約結束的日期。
選擇完成之後,按下開始計算按鈕,在下方的標籤就會出現,工作天和假日天分別有幾天。
同樣,在下方的兩個清單顯示器中,也會分別列出工作天和假日天的日期。
補充一下,後續應該還要加上國定假日,以及補班的判斷。
畫面編排的部份如下。
在排版的部份一向都是我的弱項……只能盡力把它排的清楚些。
另外,由於這次要用到計算時間,以及判斷時間的關係,所以我們一定得拉一個 clock計時器元件進來。這樣我們才能利用它的方塊,去求出我們想要的日期資訊。
全部的程式方塊如下。
第 1部份的程式方塊記錄。
變數_中間間隔幾天,是用來放兩個日期之間差了幾天。
變數_工作天列表,初始值是空清單,等一下會拿來放工作天是那幾天。
變數_假日天列表,這個是一樣的意思,只是要拿來放假日天是那幾天用的。
第 2部份的程式方塊記錄。
建立一個叫判斷工作日或假日的程式。
程式一開始的時候,先把清單_工作天列表和清單_假日天列表給清單,這樣在重覆使用時候,才不會記錄到上一次使用的資料。
加入一個判斷式,判斷變數_中間間隔有幾天的值是不是大於等於 1。
兩個日期的間隔大於等於 1的話,代表合約開始的日期和結束的日期不是同一天。
這個變數的值,我們等一下再寫一個程式來計算它。
用 call clock1 weekday的方塊,我們可以取得日期是每個星期的第幾天。
app inventor中,每個星期的第 1天是星期天,第 7天是星期六。
所以我們用 call clock 1 weekday方塊取出來的值,如果是等於 1或是等於 7的話,代表那一天就是假日。如果不等於 1或是 7的話,那就是工作天。
因為整個合約的期程可能有好幾個月,所以我們不可能一天一天去數。所以這裡我們用 for each number from的方塊來做。從 0開始計算,一直計算到變數_中間間隔幾天的值,每次增加 1。
這裡用 call clock add days的方塊來做。這個方塊的用法就是把 instant的日期加上 quantity上的數字,產生一個新的日期時刻的意思。
舉個例,如果我們在 instant的值輸入 2022.02.18,quantity的值輸入 1的話,那麼經過 call clock add days這個程式方塊之後,我們取得的時刻,就是 2022.02.19。
我們取得兩個日期中的每一天,也判斷出那一天是工作天,那一天是假日天了。但我們知道,時刻是很長的一串文字,在閱讀的時候很難看的懂,所以我們會在時刻的前面,加上 call clock format date的方塊,把它改成 yyyy MMM dd年月日的格式之後,再儲存在我們的清單中。
同樣提醒一下,在 APP IVNENTOR中的時間有三種出現的型式,分別是時刻、毫秒以及時間格式。在用的時候要稍微的注意一下。
第 3部份程式方塊記錄。
建立計算有幾天的程式。
把變數_中間間隔幾天的值,設定成 2天日期的時間差。
我們用 call clock durationtodays的方塊來計算,但是在這裡方塊中,我們只有看到一個 duration的參數。這個參數要怎麼填入 2個日期?
再補充一下,時間方塊參數所對應的值應該要填什麼。
instant,填時刻(很長的一串)
duration,填毫秒。
所以這裡我們用 call clock.duration的方塊,去取得兩個時刻的毫秒差,再填到 call clock.duration to days的 duration參數裡頭。
真的分不出來的話,就請拉一個標籤來顯示我們取得的值是什麼。
instant時刻,是很長的一串字。
毫秒,就是數字的組合。
第 4部份的程式方塊記錄。
習慣了 clock的時間顯示方式之後,這裡就很清楚了,這裡就是把 label 2.txt標籤 2的文字,顯示成日期選擇器選擇的時刻轉成年月日的格式來顯示。
第 5部份的程式方塊記錄。
日期選擇器 2的寫法也是相同的。
第 6部份的程式方塊記錄。
當計算按鈕按下之後,就呼叫我們寫好的兩個程式,計算有幾天以及判斷工作日或假日。
這兩個程式,其實可以合併,只是拆開寫,對我來說比較好去區分。
這裡沒有完成的部份是沒有加入國定假日的部份。
我想之後應該可以直接從 google日曆上匯出 csv檔,再匯入這裡,然後我們再來寫程式判斷。
這次的 aia檔的下載連結如下:
NO_166_Working_day.aia
app inventor交流討論群組連結如下(掃描 QR code或是點擊連結皆可)
https://line.me/ti/g2/Loxwrcc2iNRS5-Qd4SFXxQ?utm_source=invitation&utm_medium=link_copy&utm_campaign=default
參考書籍請見博客來書籍介紹頁面:
手機應用程式設計超簡單 App Inventor 2零基礎入門班
TQC+ 創意App程式設計認證指南
TQC+創意App程式設計認證指南解題秘笈
手機應用程式設計超簡單:App Inventor 2初學特訓班
手機應用程式設計超簡單:App Inventor 2小專題特訓班
手機應用程式設計超簡單:App Inventor 2資料庫專題特訓班
之前介紹過的一些 appinventor的使用記錄,都整理在下面這個頁面上了。
APP INVENTOR學習記錄及資源整理頁面