在JMP中是否有相當於Excel的EOMonth功能?所有,
試圖看到JMP中有相當於Excel的EOMonth函數嗎?我試圖將其重寫為用戶定義函數。雖然它適用於大多數情況,但在某些情況下我的代碼失敗了。在我花費更多時間之前,試著看看是否有JMP提供的內置功能?
屏幕截圖來源:ExcelJet

Re:在JMP中是否有相當於Excel的EOMonth功能?這是另一個可能有用的版本。這個的優點是能夠接受負的MonthToEval參數,並且它還避免了需要嘗試多個日期來查看日期是否有效。
我的關鍵變化是將月份推進一個月,並使用Date MDY()獲取下個月的第一天,然後從最終答案中減去一天。
EOMONTH = Function( {Date, MonthToEval},
{Date, MonthToEval, EvalMonth, EvalYear, ReturnDate},
EvalMonth = Month( Date ) + MonthToEval + 1;
EvalYear = Year( Date );
While( EvalMonth > 12, EvalMonth-=12; EvalYear++; );
While( EvalMonth < 1, EvalMonth+=12; EvalYear--; );
ReturnDate = Date MDY( EvalMonth, 1, EvalYear ) - In Days( 1 );
);Re:在JMP中是否有相當於Excel的EOMonth功能?這是同一功能的替代版本。 它使用更簡單的算法
EOMONTH = Function( {Date, MonthToEval},
{Date, MonthToEval, EvalMonth, EvalYear, EvalDay, ReturnDate},
EvalMonth = Month( Date );
EvalYear = Year( Date );
If( EvalMonth + MonthToEval > 12,
EvalMonth = EvalMonth + MonthToEval - 12;
EvalYear = EvalYear + 1;
,
EvalMonth = EvalMonth + MonthToEval
);
EvalDay = 28;
While( Is Missing( Date MDY( EvalMonth, EvalDay, EvalYear ) ) == 0,
ReturnDate = Date MDY( EvalMonth, EvalDay, EvalYear );
EvalDay = EvalDay + 1;
);
ReturnDate;
);
mydate = Date MDY( 2, 20, 2020 );
mymonth = 0;
Show( Format( eomonth( mydate, mymonth ), "mm/dd/yyyy" ) );Re:在JMP中是否有相當於Excel的EOMonth功能?嗯,我想我想出來了 - 但是如果有人想出一個更簡單/更好/更強大的解決方案 - 請分享 - 不要傷害。
IsLeapYear = function({Input_Year},{Default Local},
If(Is String(Input_Year),
Input_Year = Num(Input_Year);
);
If( (Mod(Input_Year,400) == 0 | (Mod(Input_Year,4) == 0 & Mod(Input_Year,100)!= 0)),
return(1);
,
return(0);
);
);
EOMonth = function({Start_Date,Months},{Default Local},
NewDate = Date Increment(Start_Date,"Month",Months,"start");
NewMonth = Month(NewDate);
NewDay = Day(NewDate);
NewYear = Year(NewDate);
If(Contains({1,3,5,7,8,10,12},NewMonth),
NewDay = 31;
,
If(Contains({4,6,9,11},NewMonth),
NewDay = 30;
,
If(NewMonth == 2,
If(IsLeapYear(NewYear),
NewDay = 29;
,
NewDay = 28;
);
);
);
);
// Return Result
return(Date MDY(NewMonth,NewDay,NewYear));
);
Start_Date = Date MDY(2,15,2015);
Months = -15;
Show(As Date(Start_Date));
NewDate = EOMonth(Start_Date,Months);
Show(As Date(NewDate));