转换日期(年月日)到天数

问题描述:

我想一个函数(使用公历规则)给出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 

我需要这个,所以我可以减去两个日期来找到它们之间的天数。

+0

@Adam谢谢!我编辑了我的问题以指定公历。我正在处理新创建的业务记录 - 当然没有接近100年的记录。只要初始日值不能为零(我将其保留为“空白”指标)。我只会减去这些值来确定它们之间的天数。 –

请看下面的例子 - 函数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 
+0

完美的作品,是我所希望的......一个代码片段的答案,我可以剪切和粘贴。 –

+0

虽然不是问题的一部分,但我注意到这个函数也提供了星期几。 7模数返回的收益率(0 = Sun,1 = Mon,...,6 = Sat)。 –

Dyalog APL,您可以使用翻译的内置DateToIDNIDNToDate方法,将并从International Day Number,从而允许整数数学。

可以方便地将它们打包如下:

ToIDN ← {⊢ 2 ⎕NQ # 'DateToIDN' , ⍵} 
ToDate ← {3 ⍴ 2 ⎕NQ # 'IDNToDate' , ⍵} 

Try it online!

是对抗⎕NQ害羞,并且3⍴是砍掉被附加作为平日数4 th元件。

你还可以定义操作,它允许你约会无缝操作:最后

Datewise ← {ToDate (ToIDN ⍺) ⍺⍺ ⍵} 

Try it online!

,如果你不使用Dyalog APL,或者如果你有兴趣在实际的公式要确定IDN,请查看the dfns workspace中的daysdate函数。