date_i18n( 'w' );
で、今日の曜日を数字で取得することができます。
この数値によって、+n day に 2が加算されるような分岐処理を行えば実現可能かと思われます。
お盆や年末年始についても、○月○日から○月○日といったように確実に決まっているのであれば、実現できそうです。
>>jim912様
ご返答ありがとうございます。wで曜日を取得できるのは初めて知りました。分岐処理のコードについても具体的にご教授頂ければと思います。例えばその曜日取得を使って+n dayの間に土曜日、日曜日を含む場合は、結果として表示される日に土曜・日曜日を含まない日にするといったコードを教えていただきたく思います。
当方php初心者ですので、できれば具体的に書いていただけると助かります。よろしくお願いいたします。
>>Takuro Hishikawa様
ご返答ありがとうございます。GoogleChromeで和訳してみて読ませて頂いたのですが
、正直、理解できませんでした。申し訳ございません。
特に当方php初心者ですので、コードを記入する場合の書き方がURLの書き方ですと分かりませんでしたので、そちらもふまえてコードの実装方法をご教授頂ければと思います。
例えばなのですが
<?php echo date_i18n(“Y年m月d日”,strtotime(“$today +1 day +9 hours”)); ?>制作開始
というそれぞれのコードの中に条件分岐のコードを記述するというのは出来ないのでしょうか?またそれでは無理だというのであれば、実際に書くコードをご教授お願いいたします。
よろしくお願いいたします。
@makomakoさん、
phpが書けないあなたが、書ける人に代わりに実際に動くコードを書いてほしいとお願いするのは、仕事の依頼になってしまいます。もうすこし、自分でがんばってみませんか?
まず、jim912さんが date_i18n()
関数で曜日が取得できることを教えてくれています。
また、私が示した参考URLのベストアンサーでは、
$holidays = array('12-24', '12-25');
$weekend = array('Sun','Sat');
の様に配列で休日と土日を配列で定義し、in_array()
関数によって休日、または土日に該当するかどうかを調べています。
これらをふまえて、土日やお盆などに該当する場合、次の日を取得し直すことができそうじゃありませんか?
とか言いつつ、気になったのでコードも書いてしまった…。参考URLのほぼ丸パクリですが
<?php
$holidays = array('08-13', '08-14', '08-15'); // 休日の定義
$weekend = array('Sun', 'Sat'); // 土日の定義
$date = new DateTime(); // 現在時刻の取得
$dateList = array(); // 日付を格納する空の配列を定義
$i = 0;
while ($i < 7) { // 直近7日間を取得
$date->add(DateInterval::createFromDateString('1 day')); // 1日送る
if (in_array($date->format('m-d'), $holidays)) continue; // 休日の場合は次の日に飛ばす
if (in_array($date->format('D'), $weekend)) continue; // 週末の場合は次の日に飛ばす
$dateList[] = clone $date;
$i++;
}
echo date_i18n('Y年n月j日', $dateList[0]->getTimestamp()); // 1営業日後
echo date_i18n('Y年n月j日', $dateList[4]->getTimestamp()); // 5営業日後
echo date_i18n('Y年n月j日', $dateList[6]->getTimestamp()); // 7営業日後
DateTimeクラスを覚えると日付関係の処理がとても楽になります。
また、PHP初心者でもwhile
文やin_array()
関数は頻出ですので、PHPマニュアルを読んで覚えておきましょう。
Takuro Hishikawa様
ご返答ありがとうございます。
コードも書いていただき本当に申し訳ございませんでした。
初心者というより素人なのでこれからphpについて勉強して行きたいと思います。
書いて頂いたコードを使わせて頂きWPのテンプレートに貼付けて
1日色々試行錯誤して見たのですが、ページが白くなって表示されませんでした。
7営業日後の後に、?>をつけてみたりしたのですが、表示されませんでした。
現在、固定ページのテンプレートに記入しているのですが、お教えいただいたコードは
function.phpなどの特定のページで記入しないといけないルールなどがあるのでしょうか?
申し訳ございませんがアドバイスよろしくお願いします。
ページが白くなった時は、たいていの場合は500エラーが出ています。
500エラーとは、PHPの記載に問題が合ったため、ページが表示できないと言うことです。
単に真っ白になって手がかりが無いように見えますが、デバッグモードをオンにするとエラーの原因を表示することができます。
http://gatespace.jp/2012/07/20/wordpress-debugging/
早速のご返信ありがとうございます。
デバッグモードにしたところ
Fatal error: Call to undefined method DateTime::ファイルのパスとその行
がでました。
調べたところ
定義していない関数を呼びだそうとして起こるエラーだそうなのですが
$holidays = array('08-13', '08-14', '08-15'); // 休日の定義
$weekend = array('Sun', 'Sat'); // 土日の定義
$date = new DateTime(); // 現在時刻の取得
$dateList = array(); // 日付を格納する空の配列を定義
の記述に問題があるということになるのでしょうか?
PHP5.2をお使いなんですね。PHP5.3以上にバージョンアップしたほうがいいですよ…。
とか言いつつ、気になったのでコードも書いてしまった…。
Hishikawa さん、面白すぎです。それじゃ、Unix タイムスタンプ・バージョン、PHP 2.x 用。
$day_unit = 60*60*24;
$scheduled_days = array('begin' => 1, 'test' => 2, 'arrival' => 5);
$weekend = array('土曜日', '日曜日');
$holidays = array('08-13', '08-14', '08-15', '12-31', '01-01');
$dateList = array();
$dateList['ordered'] = $time = current_time('timestamp');
$counter = 1;
while (true) {
$time += $day_unit;
if (in_array(date_i18n('l', $time), $weekend)) continue;
if (in_array(date_i18n('m', $time).'-'.date_i18n('d', $time), $holidays)) continue;
if ($counter == $scheduled_days['begin']) $dateList['begin'] = $time;
if ($counter == $scheduled_days['test']) $dateList['test'] = $time;
if ($counter == $scheduled_days['arrival']) {
$dateList['arrival'] = $time;
break;
}
$counter++;
}
echo date_i18n('Y年m月d日', $dateList['ordered']);
echo date_i18n('Y年m月d日', $dateList['begin']);
echo date_i18n('Y年m月d日', $dateList['test']);
echo date_i18n('Y年m月d日', $dateList['arrival']);
@makomako さん
PHP は 5.2.4 までサポート内ですが、WordPress 3.3 は、さすがにまずいと思いますよ。
おー、タイムスタンプ・バージョン!Good jobです!(めんどくさくてやらなかった人)
>>Takuro Hishikawa様
phpのバージョンの問題だったのですね。その辺も含めてこれからphpについて精進して行きます。
>>kjmtsh様
書いて頂いたコードを使わせて頂いたところ、バッチリ自分の希望が叶いました。本当に本当にありがとうございました。
WordPress 3.3はまずいですか?分かりました。バージョンアップを検討させて頂きます。
jim912様、Takuro Hishikawa様、kjmtsh様
私のご質問にお答え頂きありがとうございました。
特に最後までお付き合いくださいましたTakuro Hishikawa様、求めていたコードを書いて頂いたkjmtsh様には本当に感謝です。
これから私も自分で色々出来るようになるため、phpの勉強をさせて頂きます。
(勉強するより前に疑問がでてきて、またフォーラムで質問したとしてもお許しください)
皆様、本当にありがとうございました。