[PHP-users 26337] Re: RHL8でのmktime(Re: PHP4.4.0 での mktime)

yum qqqz9b69 @ green.ocn.ne.jp
2005年 7月 30日 (土) 03:51:39 JST


ゆむ と申します。

RHL7.3で試してみました。Cで。
-------
#include "stdio.h"
#include "time.h"
int main(void)
{
  struct tm t;
  time_t timestamp;
  t.tm_hour = 0;
  t.tm_isdst = 0;
  t.tm_mday = 1;
  t.tm_min = 0;
  t.tm_mon = 0;
  t.tm_sec = 0;
  t.tm_yday = 0;
  for( t.tm_year=0 ; t.tm_year<140 ; t.tm_year++ )
  {
    timestamp = mktime( &t );
    printf( "%d\t%d\n", t.tm_year+1900, timestamp );
  }
  return 0;
}
-------
以下結果。

1900    -1
1901    -1
1902    -1
(中略)
1969    -1
1970    -32400
1971    31503600
1972    63039600
1973    94662000
(中略)
2036    2082726000
2037    2114348400
2038    2145884400
2039    -1

PHPのmktimeはCのmktimeを利用しているだけのようなので、少なくともRHL7.3で
は根本的に駄目なようです。

なのでこんな感じの関数作ってやればいいのかな?エラー処理つけてないけど。
----------
function mktime2 ( $hour, $min, $sec, $month, $day, $year )
{
	$s = 0;
	if( $year>1900 )	$year-=1900;
	if( $year<70 )
	{
		$s = (((70 - $year) >> 2) + 1)*126,230,400;
		$year = 74-((70 - $year) % 4);
	}
	$ut = mktime( $hour, $min, $sec, $month, $day, $year );
	return $ut - $s;
}
----------
yum <qqqz9b69 @ green.ocn.ne.jp>



PHP-users メーリングリストの案内