perlで曜日を入れる方法

このQ&Aのポイント
  • perl初心者です。試行錯誤の連続です。日付に曜日を追加する方法を教えてください。
  • また、指摘すべき変な箇所があれば教えてください。
  • 以下は日付計算の関数です。
回答を見る
  • ベストアンサー

perl 曜日を入れる

perl初心者です。試行錯誤の連続です・・・ このように ↓ ( )と曜日を追加するにはどうしたら良いでしょう?。 2008/07/05(土) また、変なところもありましたら指摘してください <(_ _)> #-------------------------------------- # 時間 $time = time(); # 範囲日 $day1 = day0($time + (86400 * 2)); $day2 = day0($time + (86400 * 3)); $day3 = day0($time + (86400 * 4)); ### @weeeeek = ('$day1','$day2','$day3','$day4','$day5','$day6'); # 日計算 sub day0{ my $time = shift || time(); my $day0 = $time + (24 * 60 * 60); my ($yyyy, $mm, $dd) = (localtime($day0))[5,4,3]; $yyyy += 1900; $mm += 1; return( sprintf('%4d/%2d/%2d', $yyyy, $mm, $dd) ); } #-------------------------------------- ### @list = ('(日)','(月)','火','水','木','金','土'); ### ( "$mm/$dd + "(" + list + ")" );

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

> my(@weekdayname) = ('日','月','火','水','木','金','土'); をどこかに追加 > my ($yyyy, $mm, $dd) = (localtime($day0))[5,4,3]; ↓ > my ($yyyy, $mm, $dd, $w) = (localtime($day0))[5,4,3,6]; > sprintf('%4d/%2d/%2d', $yyyy, $mm, $dd) ↓ > sprintf('%4d/%2d/%2d(%s)', $yyyy, $mm, $dd, $weekdayname[$w])

takumana20
質問者

お礼

すごい!出来ました ありがとうございました。 でも新たに問題が・・・ 時間があればお願いします<(_ _)> http://oshiete1.goo.ne.jp/qa4142433.html

関連するQ&A

  • perl セレクトメニューを ↓の者です。

    前質で→ http://oshiete1.goo.ne.jp/qa4142221.html #print "<option value=\"$day1\">$day1"; で出来たのですがw dayの日範囲を多くするとかなり長くなってしまい(T_T) (初心者のくせに)foreachを使ってみようかと エスケープしたりダブルコーションにしたり色々やっても・・・ <option>に月日が表示されません(T_T) 基本的に間違っているのでしょうか・・・ お願いします。 *他にも変なところがあったら教えて下さい。 -------------------------------------- <select name=dd><option value="なし" selected> ↓ <option value="なし">指定なし EOM foreach (0 .. $#pl) { if ($in{'plan'} eq $_) { print "<option value=\"$_\">$pl[$_]\n"; } else { print "<option value=\"$_\">$pl[$_]\n"; } } print "</option></select>\n"; #-------------------------------------- ### ↑メイン.cgiです。↑ ### ↓ サブ.cgiです。↓ #-------------------------------------- # 時間 $time = time(); # 範囲日 $day1 = day0($time + (86400 * 2)); $day2 = day0($time + (86400 * 3)); $day3 = day0($time + (86400 * 4)); ############ 上下の行のday数が14日間位まで続く・・・ @pl = ('$day1', '$day2', '$day3'); # 日計算 sub day0{ my(@weekdayname) = ('日','月','火','水','木','金','土'); my $time = shift || time(); my $day0 = $time + (24 * 60 * 60); my ($yyyy, $mm, $dd, $w) = (localtime($day0))[5,4,3,6]; $yyyy += 1900; $mm += 1; return( sprintf('%4d/%2d/%2d(%s)', $yyyy, $mm, $dd, $weekdayname[$w]) ); }

    • ベストアンサー
    • Perl
  • UTF8でperlスクリプトを書くと年月日が表示しない

    UTF-8で下記スクリプトを書いて実行すると、 $yy年$mo月$dd日 にあたる部分が表示されず、($day)$hh:$mm:$ss の部分しか表示されません。 ------------------------------------ #!/usr/bin/perl use utf8; use Encode; &get_date(); print "Content-type: text/html\;charset=utf-8\n\n"; print encode('utf8',"$date"); exit; sub get_date { ($ss,$mm,$hh,$dd,$mo,$yy,$day)= localtime(time); $day = ("日","月","火","水","木","金","土")[$day]; $yy = $yy+1900; $mo++; if ( $mo < 10 ) { $mo = "0$mo"; } if ( $dd < 10 ) { $dd = "0$dd"; } if ( $hh < 10 ) { $hh = "0$hh"; } if ( $mm < 10 ) { $mm = "0$mm"; } if ( $ss < 10 ) { $ss = "0$ss"; } $date = "$yy年$mo月$dd日($day)$hh:$mm:$ss"; } ------------------------------ EUCコードでスクリプトを書いてencodeなど不要な部分を変更した場合は$yy年$mo月$dd日の部分も表示されます。 また、上記  $date = "$yy年$mo月$dd日($day)$hh:$mm:$ss"; の部分を下記のように変更すると表示されますが... -------------------------- $date = $yy; $date .="年"; $date .= $mo; $date .="月"; $date .= $dd; $date .="日"; $date .="($day)$hh:$mm:$ss"; -------------------------- なぜ一括してダブルクォートで囲むと表示されないのでしょうか? 今まではEUCでスクリプトを書いておりました。UTF8に翻弄されております... どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • サーバの日時を日本語で表示したい

    $now=localtime(time)で、サーバの日時を持ってくることができますが、それを200x年mm月dd日(曜日)というふうに、日本語で表示する方法がありますでしょうか? JavaScriptを併用しても結構です。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • 月曜日から始まる週間カレンダーの作り方

    いつもありがとうございます。 下記のようなコードを書いて1週間のカレンダーを作っていますが、 どうしても日曜日からの表示になります。 この表示を月曜日から始まり、日曜日で終わるカレンダーにならないものか考えるのですが、どうもうまくいきません。 よきアドバイスをお願いします。 <? //来週・前週の---日曜日----をgetした値 $get_sunday = htmlspecialchars($_GET["get_sunday"]); $entry_day = htmlspecialchars($_GET["entry_day"]); //変数の値の識別カレンダー表示 //get_sunday (来週・前週)の値がgetされていたら if($get_sunday!=""){ //getされた日曜日の日付 $mm = date("m",strtotime($get_sunday)); $dd = date("d",strtotime($get_sunday)); $yyyy = date("Y",strtotime($get_sunday)); //getされた日曜日の日付(日のみ) $sunday_num = $dd; //getされた日曜日の日付(年月日) $kyujin_day = date("Y-m-d",mktime(0,0,0,$mm,$dd,$yyyy)); } // ================================================= //変数の値の識別           カレンダー表示 //entry_day (指定した日)の値をgetされたら if($entry_day!=""){ $mm = date("m",strtotime($entry_day)); $dd = date("d",strtotime($entry_day)); $yyyy = date("Y",strtotime($entry_day)); //$week_numに今日の曜日ナンバーを代入(mktime(0,0,0,今日の月,今日の日,今日の年) //日0・月1・火2・水3・木4・金5・土6 $week_num = date("w", mktime(0,0,0,$mm,$dd,$yyyy)); //entry_dayの値 $kyujin_day = date("Y-m-d",mktime(0,0,0,$mm,$dd,$yyyy)); //日曜日の日付(日のみ) $sunday_num = $dd - $week_num; } // ================================================= //変数の値がない場合は本日の日付の取得 カレンダー表示 if($get_sunday=="" and $entry_day==""){ $mm = date("m",time()); $dd = date("d",time()); $yyyy = date("Y",time()); //$week_numに今日の曜日ナンバーを代入(mktime(0,0,0,今日の月,今日の日,今日の年) $week_num = date("w", mktime(0,0,0,$mm,$dd,$yyyy)); $kyujin_day = date("Y-m-d",mktime(0,0,0,$mm,$dd,$yyyy)); //日曜日の日付(日のみ) $sunday_num = $dd - $week_num; } //前週、次週に日曜日の日付を取得    カレンダー表示 $sunday_last = $sunday_num - 7; $sunday_next = $sunday_num + 7; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>レンダー画面</title> </head> <body> <table> <tr> <td></td> <td bgcolor="#00FFFF">日</td> <td bgcolor="#00FFFF">月</td> <td bgcolor="#00FFFF">火</td> <td bgcolor="#00FFFF">水</td> <td bgcolor="#00FFFF">木</td> <td bgcolor="#00FFFF">金</td> <td bgcolor="#00FFFF">土</td> <td></td> </tr> <tr> <form method="get" name="form2"action="test2.php"> <td> <input type="hidden" name="get_sunday" value= "<?php echo date("Y-m-d", mktime(0, 0, 0, $mm, $sunday_last, $yyyy)); ?>"> <input type="submit" name="Submit2" value="前週へ"> </td> </form> <? //週カレンダー(前週ボタン作成)ここまで //週カレンダー日付を入れる $w2 = $sunday_num; $select_day = date("Y-m-d", mktime(0, 0, 0, $mm, $w2, $yyyy)); $i = 0; while($i < 7) { //日曜日から順に日付を$select_dayに入れていく ?> <td bgcolor="#CCFFFF"><? echo date("m月d日", mktime(0, 0, 0, $mm, $w2+$i, $yyyy)) ?></td> <? // 日付けを一つ繰り上げる $i++; } ?> <form method="get" name="form2" action="test2.php"> <td> <input type="hidden" name="get_sunday" value= "<?php echo date("Y-m-d", mktime(0, 0, 0, $mm, $sunday_next, $yyyy)); ?>"> <input type="submit" name="Submit" value="次週へ"> </td> </form> </table> </body> </html>

    • 締切済み
    • PHP
  • 30分経過したかどうかの判断

    以下のコードで $nowdate(sprintf変換)で日付を得ています。 ($ss,$mn, $hh, $dd, $mm, $yy) = localtime(time); $yy -= 100; $mm++; $nowdate = sprintf("%02d/%02d/%02d_%02d:%02d:%02d:"   ,$yy,$mm,$dd,$hh,$mn,$ss); $nowdate を次に取得した時に、前の$nowdateから30分経過して いるかそうでないかを知りたいのです。なお、前の$nowdateは ファイルに保存しておきその都度読み出すことにしました。 前後で時間を比較するのは、文字列で比較してしまうこと事態が 間違っているのでしょうか。(普通に考えてそうですね) やはり、$yyの大小、$mmの大小・・・という具合に一つ一つ処理 していくしかないのでしょうか。 いいアイデアがあれば教えて下さい。

    • ベストアンサー
    • Perl
  • 「曜日」に該当する英語(省略形)は?

    不思議にネットや当サイトの過去Q&Aを調べても、本件について書かれたものが見つからないのですが、「曜日」に該当する英語省略形は何でしょうか? 勿論、各曜日の省略形はわかりますし、ネットでも沢山記載があります。MON, TUES, WED・・・ですよね。そうではなくて、ここで伺いたいのは、年=YEAR(短縮形はYY又は桁数に応じてYYYY)、月=MONTH(短縮形はMM)、日=DAY(短縮形はDD)の次に出てくる「曜日」に該当する英語(省略形)についてです。 和英辞典を調べると、「曜日」は、単にDay(これでは「日」と区別がつかない。)又はDay of the weekとあり、やっと見つけた以下のサイトには短縮形を3桁でDDDとするケースが見られますが、これは一般的なのでしょうか? http://www.tsware.jp/study/vol9/vbanote_09.htm

  • 縦カレンダーの曜日に色づけ

    <?php $lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy)); for ($i = 1; $i <= $lastd; $i++) ?> <tr> <?php  $ts = mktime(0, 0, 0, $mm, $i, $yyyy);  $ymd = date("Y/m/d", $ts);  $ymdstr = strftime("%Y年%m月%d日(%a)", $ts); ?> <td><?php echo $ymd ?></td> <?php //曜日表示  $_m =$m;  $dd = $i;  $aday = array("日", "月", "火", "水", "木", "金", "土"); while( $m==$_m ){ printf("<td><center>%s</center></td>", $aday[date("w", $ts)]); $d++; //次の日の月を$_mに代入 $_m = date("m",$ts); } ?> 日付の部分を"switch文"を使って書きたいのですが、わからずに苦労しています。教えてもらえると助かります。よろしくお願いします。

    • ベストアンサー
    • PHP
  • Excelの年・月・日・曜日の書式

    excel2013を使用中です。 yyyy"年"mm"月"dd"日""("aaa")" yyyy"年"mm"月"dd"日("aaa")" yyyy"年"mm"月"dd"日"(aaa) 上記の式、検索する出てきます。どれも結果は同じになります。 なんで、このように複数の書式があるのでしょうか? また、一般的な書式はどれなんでしょうか? また、「”」は、和文を表記する時に、囲む記号なのでしょうか? 私はレベル的には、初心者です。

  • Perlでの Timeの足し算

    時間の足し算をやりたい。訳あってライブラリが使えません。 方法は無いでしょうか? 仮にライブラリが使えるなら、下記のようでうまく行っています。 --------------------------------------------------- use Time::Local; $year=2008; $mon =10; $mday=24; $hours = 23; $min = 0; $sec = 0; $time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year); $a1=($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time ); $mytimeORG= sprintf("%04d/%02d/%02d %2d:%2d", $year + 1900, $mon +1, $mday,$hour,$min); print "$mytimeORG\n"; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time + 32400); #9H加算 $mytime9H= sprintf("%04d/%02d/%02d %02d:%02d", $year + 1900, $mon +1, $mday,$hour,$min); print "$mytime9H\n"; ---------------------------------------------

    • ベストアンサー
    • Perl
  • 日付取得、計算及び表示コードが動作しません。

    日付取得、計算及び表示コードが動作しません。 下記のコードのどこが間違っているのか、どなたかお分かりですか? このコードでは、今日の日付をサーバから取得し、それから10日後の日付を計算して表示したいです。 $currentdate = .getdate(); $yyyy = $currentdate["year"]; $mm = $currentdate["mon"]; $dd = $currentdate["mday"]; $int_day = 10; $duedate = .date("y/m/d", mktime(0, 0, 0, $mm, $dd+$int_day, $yyyy)); echo "$duedate" また、上記のコードが動作するようになったとして、表示される日付は「2008/06/10」のようになるかと思いますが、これを「2008年06月10日」のように表示させる方法をご存知でしょうか? >$duedate = .date("y/m/d", mktime(0, 0, 0, $mm, $dd+$int_day, $yyyy)); 上記コードを下記のように変更してもだめです。 >$duedate = .date("y年m月d日", mktime(0, 0, 0, $mm, $dd+$int_day, $yyyy)); よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう