メルマガ配信システムの予約配信機能などで役に立つperlスクリプト例。
フォームから年・月・日・時などを別々に受け取った場合、その日時が予約可能であるかなどを判別するのには、Time::Localモジュールを使うと便利。
※下の$FORMハッシュ名部分はご自分のリードパース環境に合わせて読み替えてください。
($inとか・・・)
sub check_reserve_day{ #配信日チェック
if($FORM{'res_year'} eq "" || $FORM{'res_mon'} eq "" || $FORM{'res_day'} eq "" || $FORM{'res_time'} eq ""){
&error("予約する日時を指定してください。");
}
my $leap = &leapyear($FORM{'res_year'}); #うるう年なら1
if ($FORM{'res_day'} > $mdays[$FORM{'res_mon'}-1] ){
if ($FORM{'res_mon'} == 2){
if ($leap == 1){
if ($FORM{'res_day'} > 29){
&error("存在しない日時です");
}
}
else{
if ($FORM{'res_day'} > 28){
&error("存在しない日時です");
}
}
}
else{
&error("存在しない日時です");
}
}
#モジュール読み込み
use Time::Local qw( timelocal );
#yyyy-mm-dd-tt形式をエポック秒に戻す
my $res_epoch = &timelocal( 0, 0, $FORM{'reserve_time'}, $FORM{'res_day'}, $FORM{'res_mon'}-1, $FORM{'res_year'}-1900 );
if (($res_epoch - time)/60 >= 60){
if (($res_epoch - time)/60/60/24 > 30){
&error("予約できるのは30日先までです");
}
}
else{
&error("予約可能日時は1時間後からです");
}
}
sub leapyear{ #閏年
my($year)=@_;
if ($year % 4 == 0){
if ($year % 100 == 0){
if ($year % 400 == 0){
return 1
}
else{
return 0;
}
}
else{
return 1;
}
}
else{
return 0;
}
}
※ちなみにエポック秒(1900年1月1日0:00からの経過秒)には、うるう秒は含まれません。
フォームから年・月・日・時などを別々に受け取った場合、その日時が予約可能であるかなどを判別するのには、Time::Localモジュールを使うと便利。
※下の$FORMハッシュ名部分はご自分のリードパース環境に合わせて読み替えてください。
($inとか・・・)
sub check_reserve_day{ #配信日チェック
if($FORM{'res_year'} eq "" || $FORM{'res_mon'} eq "" || $FORM{'res_day'} eq "" || $FORM{'res_time'} eq ""){
&error("予約する日時を指定してください。");
}
my $leap = &leapyear($FORM{'res_year'}); #うるう年なら1
if ($FORM{'res_day'} > $mdays[$FORM{'res_mon'}-1] ){
if ($FORM{'res_mon'} == 2){
if ($leap == 1){
if ($FORM{'res_day'} > 29){
&error("存在しない日時です");
}
}
else{
if ($FORM{'res_day'} > 28){
&error("存在しない日時です");
}
}
}
else{
&error("存在しない日時です");
}
}
#モジュール読み込み
use Time::Local qw( timelocal );
#yyyy-mm-dd-tt形式をエポック秒に戻す
my $res_epoch = &timelocal( 0, 0, $FORM{'reserve_time'}, $FORM{'res_day'}, $FORM{'res_mon'}-1, $FORM{'res_year'}-1900 );
if (($res_epoch - time)/60 >= 60){
if (($res_epoch - time)/60/60/24 > 30){
&error("予約できるのは30日先までです");
}
}
else{
&error("予約可能日時は1時間後からです");
}
}
sub leapyear{ #閏年
my($year)=@_;
if ($year % 4 == 0){
if ($year % 100 == 0){
if ($year % 400 == 0){
return 1
}
else{
return 0;
}
}
else{
return 1;
}
}
else{
return 0;
}
}
※ちなみにエポック秒(1900年1月1日0:00からの経過秒)には、うるう秒は含まれません。

コメントする