条件分岐

発売日のデータで「年」が入っていないものがあります。
つまりMM/DDしかなのですが、処理の都合上、年を1911と決めうち、1911/MM/DDにします。


その上で、

  • 発売日のMM/DDが、情報更新日(pubDate)のMM/DDより大きければ、1911を情報更新日の年に置換。
  • 発売日のMM/DDが、情報更新日(pubDate)のMM/DDより小さければ、翌年の日付とみて、1911を情報更新日の年+1に置換。


と書きたいと思います。

$b) {
echo "aはbより大きい";
} elseif ($a == $b) {
echo "aはbと等しい";
} else {
echo "aはbより小さい";
}
?>


PHP: elseif/else if - Manual
 http://jp.php.net/manual/ja/control-structures.elseif.php


こんなのもあって興味深いです。


PHPのelseifとelse ifの違い (cloned.log)
 http://d.hatena.ne.jp/cloned/20070520


で、日付を比較するわけですが……


PHP: 比較演算子 - Manual
 http://jp2.php.net/manual/ja/language.operators.comparison.php


PHP による日付・時刻・時間の計算・演算のまとめ (hoge256ブログ)
 http://www.hoge256.net/2007/08/63.html


PHPの比較演算子に関して数値以外を比較対象とした場合の動作 (人力検索はてな)
 http://q.hatena.ne.jp/1231058488


ということなので、mktime()Unixのタイムスタンプにしてから比較することにします。


PHP: mktime - Manual
 http://jp.php.net/manual/ja/function.mktime.php


そうすると

";

// □発売年から1911(不明)の場合、pubdateとの比較で発売年を代入
if ($oldyear != 1911) {

} else if (mktime(0, 0, 0, $oldmonth, $oldday, $pubdate_year) >= mktime(0, 0, 0, $pubdate_month, $pubdate_date, $pubdate_year)) {
$oldyear = $pubdate_year;
} else {
$oldyear = 1 + $pubdate_year;
}

echo "$oldyear/$oldmonth/$oldday";
?>


でいいんですかねぇ
日付データの取扱いを統一するとあっちこっちに変換を繰り返さずにすみますね。
気をつけねば


書いた後で、発売日は未定とかを2099/99/99とかに置き換えていたのを忘れてました。
そうするとunixタイムスタンプにしてから比較できないので文字列で比較するしかないですねぇ。


文字列で比較するためには桁数を揃える必要があるので、sprintf()を使います。

sprintf('%03d',$hogehoge)


%の後に変換指定子(符号指定子、パディング指定子、アラインメント指定子、表示幅指定子、精度指定子、型指定子)を続けて書く、と。
私が使う分には、上の例のようにパディング指定子(0で埋める)+表示幅指定子(桁数を決める)+型指定子(引数を整数として扱い、 10 進数として表現)の組み合わせが原則でしょうねぇ


PHP: sprintf - Manual
 http://jp.php.net/manual/ja/function.sprintf.php