perlのCIGを改造してエラーチェック機能をつけようとしています。
htmlのフォームから「2004年5月16日登録」とか「2005年12月22日削除」といった文字列が送られてくるのですが、ここから数字部分だけ抜き出してlocaltimeに直し、改造前からcgiに備わっている($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);で割り出した数値と比較して例えばif $hikaku>localtime...errorといった形でエラーを返すようにしようとしています。
ここで、フォームから送られたデータから「2004」を抽出するには
@kirokunen = split(/年/,$hiduke);
$nenn = $kirokunen[0]);
「5月」の5を抽出するには2004を抽出した残りを利用して
@kirokugatu = split(/月/,$kirokunen[1]);
$gatu = $kirokugatu[0]);
同様に
@kirokuniti = split(/日/,$kirokugatu[1]);
$gatu = $kirokuniti[0]);
として
$hikaku = timelocal($sec, $min, $hour, $niti, $gatu - 1, $nenn);
としてtimeを求めようとしたのですが、年号だけは抽出できたのに、月や日は、表面上は「5」とか「16」と言った具合にちゃんと数字だけになっているのに、timelocalの式に代入するとinternal server errorになってしまいます。
これは何がいけないのでしょうか?
他の部分の改造は手に負えないので、フォームから送らせるデータの方は直さず、「2004年5月16日登録」の形からtimelocalを求めるにはどうしたらよいのでしょうか?
No.1ベストアンサー
- 回答日時:
Unix Time を求めたいわけですね。
ということはlocaltimeは使えません。
Time:Localモジュールを使用することで簡単に求められます。
なお、localtimeで日時を求めたときは月を+1、年を+1900する必要がありますが、逆にUnix Timeを求めたい時はその逆をしてから代入しなければなりません。
$time = '2004年5月16日登録';
use Time::Local;
$time =~ /^(\d{4})年(\d{1,2})月(\d{1,2})日.*$/;
$unixtime = &timelocal(0,0,0,$3,$2-1,$1-1900);
これで変数unixtimeにUnix Timeが入ります。
なお、ここでは時と分と秒はどれも0として(0時0分0秒)います。
早々のお返事をどうもありがとうございました!
おかげさまでうまく行きました!!
「え?うそ!」と言ってしまったくらいです。もっと大変な事になるんだと思っていました。
$time = ̄ /^(\d{4})年(\d{1,2})月(\d{1,2})日.*$/;
という分割の仕方も初めて知り、大変参考になりました。
この度はどうもありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- 楽天市場 楽天市場の店舗の不手際によるキャンセルと受取拒否について(長文です) お世話になっております。 11 4 2022/09/22 18:46
- Excel(エクセル) エクセルで#以降の文字を取得したい 1 2022/03/28 13:14
- 数学 登録番号と年月日と時間から作成した数字列を出来る限り小さくする方法 7 2022/06/03 16:10
- その他(社会・学校・職場) 誰か聞いてください。 社会人6年目ですが、私はポンコツすぎますか? 上司にとあるAファイルの数式を全 1 2023/08/10 18:25
- Excel(エクセル) エクセルで重複データから重複を削除して指定の列に抽出したい 11 2022/05/11 11:26
- Excel(エクセル) DATEDIFで作成した勤務年数の並べ替えがうまくいかない 3 2023/07/31 17:09
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonにCでのexternはありますか
-
ポインター引数の関数でコンパ...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
DataGridViewの特定列に入力さ...
-
COBOLのCOMP形式について
-
Excel VBA メール作成について ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
【Excel VBA】10進数を2進数に...
-
Excel 1セル当りの文字数が2...
-
perlチェックでエラーが出て困...
-
ビットスワップとバイトスワッ...
-
perlプログラミング 空白行削除
-
postで送られてきたパラメータ...
-
バイト列とバイナリ列の違いが...
-
SQLで1バイト、2バイト混在...
-
C#でのswitch文
-
テキストボックスに入力された...
-
URLは最高何文字まで可能なので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonにCでのexternはありますか
-
@color1 = ('0000ae',・・・,'$...
-
マクロの書き換え箇所がわかり...
-
チェックボックスのvalue値の取...
-
配列へのポインタの代入
-
VB2010での連立方程式の計算
-
高校数学のベーシック
-
なぜかわかりませんscanf()の戻...
-
Perlで変数中のエスケープされ...
-
格子運動の連立同次方程式
-
代入方法
-
変数内の文字の数
-
多元配列の0初期化
-
perlのプログラミングについて
-
なぜ?
-
算術演算子
-
CSVから構造体へ代入
-
漢字交じり文字列からのlocalti...
-
$template->output();の時に ...
-
VC6++ char配列の文字列をシリ...
おすすめ情報