我想一個函數(使用公曆規則)給出3⍴⎕TS
自1 1 1 EG將返回1+天數如果函數被命名爲X
:轉換日期(年月日)到天數
X¨ (1 1 1) (1 12 31) (2 12 31) (3 12 31) (4 12 31)
1 365 730 1095 1461
我需要這個,所以我可以減去兩個日期來找到它們之間的天數。
我想一個函數(使用公曆規則)給出3⍴⎕TS
自1 1 1 EG將返回1+天數如果函數被命名爲X
:轉換日期(年月日)到天數
X¨ (1 1 1) (1 12 31) (2 12 31) (3 12 31) (4 12 31)
1 365 730 1095 1461
我需要這個,所以我可以減去兩個日期來找到它們之間的天數。
請看下面的例子 - 函數X呈指數原點1如下:
r←X b
r←(0 31 59 90 120 151 181 212 243 273 304 334)[b[2]]
r←r+b[3]+(365×b[1]-1)+-/⌊(b[1]-3>b[2])÷4 100 400
完美的作品,是我所希望的......一個代碼片段的答案,我可以剪切和粘貼。 –
雖然不是問題的一部分,但我注意到這個函數也提供了星期幾。 7模數返回的收益率(0 = Sun,1 = Mon,...,6 = Sat)。 –
在Dyalog APL,您可以使用翻譯的內置DateToIDN
和IDNToDate
方法,將並從International Day Number,從而允許整數數學。
可以方便地將它們打包如下:
ToIDN ← {⊢ 2 ⎕NQ # 'DateToIDN' , ⍵}
ToDate ← {3 ⍴ 2 ⎕NQ # 'IDNToDate' , ⍵}
的⊢
是對抗⎕NQ
害羞,並且3⍴
是砍掉被附加作爲平日數4 th元件。
你還可以定義操作,它允許你約會無縫操作:最後
Datewise ← {ToDate (ToIDN ⍺) ⍺⍺ ⍵}
,如果你不使用Dyalog APL,或者如果你有興趣在實際的公式要確定IDN,請查看the dfns workspace中的days和date函數。
@Adam謝謝!我編輯了我的問題以指定公曆。我正在處理新創建的業務記錄 - 當然沒有接近100年的記錄。只要初始日值不能爲零(我將其保留爲「空白」指標)。我只會減去這些值來確定它們之間的天數。 –