日期和時間運算子

date,datetime 值基本上有兩個運算子。 +和 - 過載(可能是 C 術語)來做日期/日期時間數學:

操作者 描述
+ 將日期(日期)或秒(日期時間)新增到日期/日期時間值。
- 獲取兩個日期/日期時間值的差異。從日期時間值中減去天數(日期)或秒數(日期時間)。

+是更容易的。它有兩個運算元,一個是日期或日期時間值,另一個是數字(儘管你可以使用任何數字,但它是一個整數用於所有實際目的)。

當其中一個運算元是日期時,則數字運算元被視為

? Date() + 10 && Get the date 10 days later
* VFP is leap year aware when doing date math
? Date(2016, 2, 28) + 1 && Add 1 day to Feb 28, 2016. Returns Feb 29, 2016.
? Date(2017, 2, 28) + 1 && Add 1 day to Feb 28, 2017. Returns Mar 1, 2017.

當其中一個運算元是日期時間時,則數字運算元被視為

一天有 24 * 60 * 60 = 86400 秒

? Datetime() + 86400 && Add 1 day to current datetime. 

新增 4 小時 15 分鐘到 2016 年 1 月 1 日下午 2:20

? Datetime(2016, 1, 1, 14, 20, 0) + (4 * 3600 + 15 * 60) 

輸出 2016 年 1 月 1 日星期五,下午 6:35:00。

使用?進行簡單列印,你在螢幕上看到的內容取決於你的日期設定。例如,如果你沒有更改任何內容,則日期設定為美式(MDY),12 小時格式(上午/下午)和世紀僅顯示最後 2 位數字。

日期和日期時間有一個特殊符號^,強制將字串嚴格解釋為 yyyy / MM / dd [HH:mm:ss | hh:mm:ss tt]格式。因此^也可以被視為日期/日期時間運算子。例如,考慮一些資料來自源,格式為 201610082230(yyyyMMddHHmm)。要將該值作為有效的日期時間:

Local cSample, tSample
cSample = '201610082230'
tSample = Ctot(Transform(m.cSample, '@R ^9999/99/99 99:99'))
? Transform(m.tSample, '@YL')

輸出(取決於系統的長日期設定):

2016 年 10 月 8 日星期六,下午 10:30:00

- 用於減法。它的運算元要麼都是日期/日期時間值,要麼是日期/日期時間,另一個是數字。

讓我們從更簡單的日期/日期時間和數字運算元開始(比如使用+運算子):

當其中一個運算元是日期時,則數字運算元被視為

? Date() - 10 && What was the date 10 days ago?
? Date(2016, 3, 1) - 1 && Returns Feb 29, 2016.
? Date(2017, 3, 1) - 1 && Returns Feb 28, 2017.

當其中一個運算元是日期時間時,則數字運算元被視為

? Datetime() - 86400 && Go back exactly one day

now 獲得 1 小時 30 分鐘前:

? Datetime() - (1 * 3600 + 30 * 60) 

第二種形式是獲取兩個日期/日期時間值之間的差異。運算元是日期或日期時間,你不能同時使用日期和日期時間(根據需要進行型別轉換,VFP 不會為你執行此操作)。規則在+和 - 中,運算元是日期,然後差異以天為單位,運算元是日期時間,然後差異以單位

新年前夕(2016 年)有多少天?

? Date(2016, 12, 31) - Date()

午夜還剩幾秒鐘?

? Dtot(Date()+1) - Datetime()

在上一個示例中,我們使用了日期/日期時間函式 DTOT - DateToTime 來獲取明天的午夜值。有許多有用的日期/日期時間函式,我們跳過它們,因為它們在技術上不被認為是運算子(儘管它們在日期/日期時間執行:)同樣適用於其他運算子。

日期/日期時間減法已簽名。也就是說,如果你使用較小的日期/日期時間作為第一個運算元,則結果將為負數。如果你需要獲得正結果而無論日期/日期時間順序如何,你可以使用 abs() 函式。