PHP、”#{ym}”という文字列のプレースホルダーを 日付 “2020年01月”などに変換する

今回は以下のような文字列のプレースホルダーに対して、実行時の日付をはめていく変換を書いていきます。 日付の操作にはChronosを使用します。

使用

プレースホルダの仕様は以下のとおりです。

  • “#{ym}” -> “2020年01月”
  • “#{ym+1}” -> “2020年02月” // 1月加える
  • “#{ym-1}” -> “2019年12月” // 1月減らす

関数

function render(string $template): string
{
    return preg_replace_callback(
        "/#\{(ym)([-\+]{1}\d{1,2})?\}/u",
        [$this, "findVal"],
        $template
    );
}


function findVal($matches)
{
    $addend = isset($matched[2]) ? $matched[2] : 0;
    $data = new FrozenDate(); // Today
    return (string)$date->addMonth($addend)->i18nFormat("yyyy年MM月");
}

echo render("来月は#{ym+1}です");  // => 来月は2020年02月です。