兩日期間日數
程式計算兩日期間的日數(包括最後一日,但不包括第一日)。 第二個程式較長,但可以輸入任何年份的日期(包括公元前(以負數形式輸入))。
程式編寫日期: 2007年9月8日 (更新日期: 2009年3月15日)
第一個程式是依照網友 SuperMANganese 研究方法將程式簡化。
第一個程式 (81 bytes)
ClrMemory: 1: While Ans: A→B: ?→Y: ?→M: ?→D:
3M-: 0>M => 12M+ => Y - 1→Y: Fix 0:
Rnd( 365.25Y - . 5) + D + Rnd( 30.6M→A:
X=0→X: WhileEnd: Norm 1: A - B
第二個程式 (120 bytes,可以輸入任何年份的日期(包括公元前))
注意: 第二個程式需要在 BASE 模式下執行,因此在選擇新程式位置後,按 3 選用BASE模式。
ClrMemory: Dec: 1: While Ans: ?→Y: ?→M:
?→D: A→B: Y + 4800 + (()>Y→Y: 3M-:
0>M => 12M+ => Y - 1→Y: 365Y + D +
(153M + 2) ÷ 5 + Y ÷ 4→A: Ans>2331253 => A + 38
- Y ÷ 100 + Y ÷ 400→A: X=0→X: WhileEnd: A - B
例題1: 計算2003年10月15日至2004年4月1日相差的日數。
按 Prog 1 再按 2003 EXE 10 EXE 15 EXE 2004 EXE 4 EXE 1 EXE (顯示相差日數為169)
例題2: 計算公元前2003年10月15日至2004年4月1日相差的日數。
注意: 此例題只適用於第二個程式,由於基模式沒有負號,請用減號代替負號輸入負值。
按 Prog 1 再按 - 2003 EXE 10 EXE 15 EXE 2004 EXE 4 EXE 1 EXE (顯示相差日數為1462982)
註1: 輸入數值時 Y? 代表年(Year),M? 代表月(Month),D? 代表日(Day)。
註2: 第一個程式輸入的日期範圍為1901-2099年。
註3: 第二個程式可以輸入公元前的日期(以負值代表年份),注意由於公曆的曆法原因,日期在1582年10月5日至1582年10月14日是不存在,所以輸入這個範圍的日期計算將不成立。日期在1582年10月15日或之後,程式自動假定日期是使用格里曆(Gregorian calendar),1582年10月4日或之前,其它則假定是使用儒略曆(Julian Calendar)。
參考資料:
http://en.wikipedia.org/wiki/Julian_day
Julian Day and Civil Date Calculator