// N→J (Number Date to Julian Date Number) // This is a code adopted from Gerard Gauny // Number Date to JDN: Returns the Julian Date Number of an calendaric // number date // Range of allowable dates is from January 1, -4712 to December 31, 9999 // CAS & Home @ algebraic and textbook mode: N→J([-]dd.mmyyyy) // negative number date means B.C. !! // Example 1 N→J(14.052004) returns 2453140 // Example 2 N→J(1.012000) returns 2451545 // Example 3 N→J(17.032014)-N→J(1,012) returns 5189 // Example 4 N→J(4.101582) returns 2299160 // Example 5 N→J(15.101582) returns 2299161 // Example 6 N→J(-1.014712) returns 0 // EXPORT N→J(nd) BEGIN // Initializing variables LOCAL D:=0, M:=0, Y:=0, ymd:=0, A:=0, B:=0, JD:=0, L:=0; LOCAL chknd:=0,DFT2:=0; // factorizing nd from Input DD.MMYY in Y, M, D // european format style DD.MMYYYY D:=IP(nd); M:=IP(((nd-D)*100)); Y:=(FP(((nd-D)*100))*10000); // american format style YYYY.MMDD // Y:=IP(nd); // M:=IP((nd-Y)*100); // D:=FP((nd-Y)*100)*100; ymd:=Y+M/100+D/10000; IF nd < 0 THEN D:=−D; M:=−M; END; // checking date ranges IF Y==0 THEN MSGBOX ("Invalid date : Year = 0"); RETURN (nd); END; IF Y>9999 THEN MSGBOX ("Invalid date (> 31 Dec 9999 A.C.) "); RETURN nd; END; IF Y<-4712 THEN MSGBOX("Invalid date (< 1 Jan 4713 B.C.)"); RETURN(nd); END; IF (Y==1582 AND (ymd>1582.1004 AND ymd<1582.1015)) THEN MSGBOX("invalid (undefined) date between 5 Oct and 14 Oct 1582 A.C."); RETURN(nd); END; // assigning values of variables IF M<3 THEN Y:=Y-1;M:=M+12 END; A:=IP(Y/100);B:=2-A+IP(A/4); IF ymd<=1582.1004 THEN B:=0 END; // Formula JD:=IP(365.25*(Y+4716))+IP(30.6001*(M+1))+D+B-1524; // checking values for day and month DFT2:=DFT; DFT:=0; chknd:=CALD(JD); IF nd == chknd THEN DFT:=DFT2; RETURN JD;END; PRINT(); PRINT("check date! nd: "+nd+" ,check ===> "+chknd); RETURN{nd, chknd}; END; // N→J