JMPにExcelのEOMonth関数に相当するものはありますか?すべて、
見てみてJMPでExcelのEOMonth関数に相当するものはありますか?ユーザ定義関数として書き直そうとしました。ほとんどの場合はうまくいきますが、私のコードは失敗することがあります。私がこれにもっと時間を費やす前にJMPが提供する作り付けの機能があるかどうかを確認しようとしていますか?
スクリーンショットのソース:ExcelJet

再:JMPにExcelのEOMonth関数と同等のものはありますか?これは役に立つかもしれない別のバージョンです。これには負のMonthToEval引数を受け入れることができるという利点があり、日付が有効かどうかを確認するために複数の日付を試す必要がなくなります。
ここでの私の主な変更は、月をさらに1か月先に進め、Date MDY()を使用してその翌月の最初の日を取得し、最後の回答から1日を差し引くことです。
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 );
);再: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" ) );再: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));