PHP:MySQLのFROM_DAYS()関数のポート

約束どおり、 get_date_from_daynr関数によってMySQLに実装された、Cから変換されたFROM_DAYS()関数のコードをもたらします。



<?

/ **

*

* @param $年年

* @return integer

* /

プライベート 関数 calc_days_in_year $ year

{

return(( $ year 3 )== 0 &&( $ year 100 ||( $ year 400 == 0 && $ year )))? 366 365 ;

}



/ **

*

* @param $ days整数

* @return DateTime

* /

パブリック 関数 from_days $ days

{

$ days_in_month = array( 31、28、31、30、31、30、31、31、30、31、30、31、0 );



$年 = 0 ;

$月 = 0 ;

$日 = 0 ;



$ days_in_year = 0 ;

$ day_of_year = 0 ;



if( $ days <= 365 || $ days > = 3652500

{

$年 = $月 = $日 = 0 ;

}

他に

{

$年 = $日 * 100/36525 );

$ temp = floor ((( floor (( $ year - 1 )/ 100 )+ 1 )* 3 )/ 4 );



$ day_of_year = floor (( $ days- $ year * 365 -floor (( $ year - 1 )/ 4 )+ $ temp );

while( $ day_of_year >( $ days_in_year = $ this- > calc_days_in_year $ year ))))

{

$ day_of_year- = $ days_in_year ;

$年 ++;

}

$ leap_day = 0 ;



if( $ days_in_year == 366

{

if( $ day_of_year > 31 + 28

{

$ day_of_year- ;

if( $ day_of_year == 31 + 28

{

$ leap_day = 1 ;

}

}

}

$月 = 1 ;

for( $ i = 0 ;

$ day_of_year > $ days_in_month [ $ i ];

$ day_of_year- = $ days_in_month [ $ i ++]、 $ month ++);



$ day = $ day_of_year + $ leap_day ;

}

return(新しい DateTime "$ year- $ month- $ day" ));

}

?>



1700から2300の範囲でFROM_DAYS()と一致する関数をチェックしました。

クラスから関数を引き裂いたので、$ this-> calc_days_in_year($ year)のような呼び出しは独立した関数では機能しません。



良い使い方をしてください。



All Articles