経過日数からの年月日の算出

経過日数から年月日に変換を行うASのコードです
処理速度向上のため2011年からの日数しか扱えません。

//日数からの年月日の逆算

//arg_1 日数

//年の算出
tmp_month_1 = 31;
tmp_month_2 = 28;
tmp_month_3 = 31;
tmp_month_4 = 30;
tmp_month_5 = 31;
tmp_month_6 = 30;
tmp_month_7 = 31;
tmp_month_8 = 31;
tmp_month_9 = 30;
tmp_month_10= 31;
tmp_month_11= 30;
tmp_month_12= 31;

//年の算出
tmp_1 = arg_1;
tmp_1 -= 734138; //2010/12/31までの日数

tmp_4 = 0; //閏年フラグ
for( function_ret_1 = 2011; tmp_1 > 0; function_ret_1 ++ ){
tmp_2 = 365;
tmp_4 = 0; //平年

if( function_ret_1 % 4 == 0 ){
tmp_2 = 366;
tmp_4 = 1; //閏年

if( function_ret_1 % 100 == 0 ){
//100で割れるので平年
tmp_2 = 365;
tmp_4 = 0; //平年
if( function_ret_1 % 400 == 0 ){
//400で割れるので閏年
tmp_2 = 366;
tmp_4 = 1; //閏年
}
}
}
if( tmp_1 – tmp_2 < 0 ) break;
tmp_1 -= tmp_2;
}
if( tmp_1 == 0 ){
function_ret_2 = 12;
function_ret_3 = 31;
} else {
//月の算出
for( function_ret_2 = 1; function_ret_2 <= 12; function_ret_2 ++ ){
tmp_2 = eval( ‘define_month_’ add function_ret_2 );

if( tmp_4 == 1 && function_ret_2 == 2 ) {
//閏年で2月の時
tmp_2 += 1;
}

if( tmp_1 – tmp_2 < 0 ) break;
tmp_1 -= tmp_2;
}
if( tmp_1 == 0 ){
tmp_1 = eval(‘define_month_’ add ( function_ret_2 – 1 ) );
if( tmp_4 == 1 ) tmp_1 ++;
}

function_ret_3 = tmp_1;
}