■=Perl, ■=結果
「年月日や曜日・時刻の取得」では現在時刻について説明しましたが、このページではもう一歩進んで time関数の利用方法について説明します。
例えば、どのようにしたら20日前の日付を得られるか、特定の日付から今日までの経過日数を算出するのはどのようにすればいいのかを考えていきたいと思っています。
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
print "$yyyymmddJです";
|
2001年11月13日です |
それでは20日後の日付を求めるには、どうのようにしたらよいのでしょうか。
print time, "<br>";
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
print "$yyyymmddJです";
|
1005634570 2001年11月13日です |
20日後の日付を求めるなら
60秒×60分×24時間×20日=1728000秒前を求めることになります。そこで
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time - 1728000);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
print "$yyyymmddJです";
|
2001年10月24日です |
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localteime();
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
print "$yyyymmddJです";
|
2001年11月13日です |
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(0);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
print "$yyyymmddJです";
|
1970年01月01日です |
1970年01月01日が得られました。time は現在の日時・時刻を1970年1月1日0時0分0からの経過秒ですので、(time)を(0)にすると、1970年1月1日0時0分0から0秒経過したことになります。
このスクリプトでは日付だけの表示なのでよく分かりません。時刻も表示させるようにしました。
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(0);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
$hhmmssJ = sprintf("%02d時%02d分%02d秒", $hour, $min, $sec);
print "$yyyymmddJで$hhmmssJです";
|
1970年01月01日で09時00分00秒です |
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(0);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon +1, $mday);
$hhmmssJ = sprintf("%02d時%02d分%02d秒", $hour, $min, $sec);
print "$yyyymmddJで$hhmmssJです";
|
1970年01月01日で00時00分00秒です |
use Time::Local; |
use Time::Local; $year=2001; $mon =10; $mday=24; $hours = 0; $min = 0; $sec = 0; $time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year); print $time, "<br>"; |
1003849200 |
use Time::Local;
$year=2000;
$mon =10;
$mday=24;
$hours = 0;
$min = 0;
$sec = 0;
$time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year);
print $time, "<br>";
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon + 1, $mday);
$hhmmssJ = sprintf("%02d時%02d分%02d秒", $hour, $min, $sec);
print "$yyyymmddJで$hhmmssJです";
|
1003849200 2000年10月24日で00時00分00秒です |
ついでに1970年1月1日0時0分0秒から現在までの経過秒と、2000年10月24日0時0分0秒までの経過秒も表示しておきます。
use Time::Local;
$year=2001;
$mon =10;
$mday=24;
$hours = 0;
$min = 0;
$sec = 0;
$time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year);
$time1 = time;
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time);
$yyyymmddJ = sprintf("%04d年%02d月%02d日", $year + 1900, $mon + 1, $mday);
$hhmmssJ = sprintf("%02d時%02d分%02d秒", $hour, $min, $sec);
print "$yyyymmddJで$hhmmssJです<br>";
$kdays = int(abs(($time1 - $time) / 60 / 60 / 24));
print "$kdays日が経過しています";
print "<br>\$time=$time, \$time1=$time1";
|
2001年10月24日で00時00分00秒です 20日が経過しています $time=1003849200, $time1=1005644169 |
$time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year); $time1 = time; |
$kdays = int(abs(($time1 - $time) / 60 / 60 / 24)); |
l_nisukeisan_8.cgi
| | Back | Coco's Home | ココとPerlで遊びませんか | |