我想要一个函数(使用公历规则)给定3⍴⎕TS
将返回1 + 1天以来的天数.E1如果函数名为X
:
X¨ (1 1 1) (1 12 31) (2 12 31) (3 12 31) (4 12 31)
1 365 730 1095 1461
我需要这个,所以我可以减去两个日期来查找它们之间的天数。
答案 0 :(得分:2)
请参阅以下示例 - 函数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
答案 1 :(得分:1)
在Dyalog APL中,您可以使用解释程序的内置DateToIDN
和IDNToDate
方法转换为International Day Number和从Try it online!转换,从而允许整数数学运算。
您可以按照以下方式方便地打包它们:
ToIDN ← {⊢ 2 ⎕NQ # 'DateToIDN' , ⍵}
ToDate ← {3 ⍴ 2 ⎕NQ # 'IDNToDate' , ⍵}
⊢
是为了阻止⎕NQ
害羞,3⍴
是为了切断作为4 th 元素的工作日编号。
您还可以定义一个允许您无缝操作日期的运算符:
Datewise ← {ToDate (ToIDN ⍺) ⍺⍺ ⍵}
最后,如果您不使用Dyalog APL,或者如果您对确定IDN的实际公式感兴趣,请查看date中的the dfns workspace和http://php.net/manual/en/class.reflectionobject.php函数