[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 メーリングリストの案内