2012/04/05

特定の日付までのカウントダウン

EasyBotter.phpを以下のように改造します。
例によってあまり賢い方法ではありません……。

class EasyBotter {

  // 途中省略

  // 文章を変換する
  private function convertText($text, $reply = FALSE){
    // 途中省略

    // 追加ここから
    // カウントダウン
    if(strpos($text, "{countdown}") !== FALSE){
      $text = $this->convertCountDown($text);
    }
    // 追加ここまで

    // フッターを追加
    $text .= $this->_footer;
    return $text;
  }

  // カウントダウンを変換
  private function convertCountDown($text) {
    $return_text = "";
    // デリミタで分割
    $event_array = explode( ",", $text);
    $target_array = explode("-", $event_array[0]);
    // 目標の日付
    $target_date = mktime(0, 0, 0, $target_array[1], $target_array[2], $target_array[0]);
    // 今日の日付
    $current_date = mktime(0, 0, 0, date("n"), date("j"), date("Y"));
    // 差を計算
    $interval = ($target_date - $current_date) / 86400;
    // 日付を日本語表記に
    $event_array[0] = date("Y年n月j日", $target_date);
    
    if($interval > 0) {
    // 日程より前
      $return_text = $event_array[0].$event_array[1]."の".$event_array[2]."まで、あと".$interval.$event_array[4]."……。";
    } elseif($interval == 0) {
    // 当日
      $return_text = "今日は".$event_array[1]."の".$event_array[2]."当日だ。任務了解。明朝より作戦行動に入る。";
    } elseif($interval == -1) {
    // 昨日
      $return_text = $event_array[0].$event_array[1]."は、昨日".$event_array[2]."を完了している……任務、完了。";
    } else {
    // 2日前以前
      $return_text = $event_array[0].$event_array[1]."は、".abs($interval).$event_array[4]."前に".$event_array[2]."を完了している……。";
    }
    return $return_text;
  }

  // 以降省略
}

パターンファイルやランダムファイルの方では、例えば以下のように記述しています。

2012-4-26,ガンダムエース6月号,発売,{countdown},日
2012-5-3,SUPER COMIC CITY 21 1日目,開催,{countdown},日