{"id":3719,"date":"2025-04-16T11:07:40","date_gmt":"2025-04-16T02:07:40","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3719"},"modified":"2025-04-16T11:07:41","modified_gmt":"2025-04-16T02:07:41","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91php%e3%81%a7%e6%97%a5%e4%bb%98%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88%e3%82%92%e8%87%aa%e5%9c%a8%e3%81%ab%e6%93%8d%e3%82%8b10%e3%81%ae","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3719","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011PHP\u3067\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u81ea\u5728\u306b\u64cd\u308b10\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<p>PHP\u3067\u306e\u65e5\u4ed8\u51e6\u7406\u306f\u3001\u591a\u304f\u306e\u958b\u767a\u8005\u304c\u983b\u7e41\u306b\u76f4\u9762\u3059\u308b\u30bf\u30b9\u30af\u3067\u3042\u308a\u306a\u304c\u3089\u3001\u610f\u5916\u306a\u843d\u3068\u3057\u7a74\u304c\u6f5c\u3080\u9818\u57df\u3067\u3082\u3042\u308a\u307e\u3059\u3002\u7279\u306b\u65e5\u672c\u8a9e\u74b0\u5883\u3067\u306f\u5e74\u53f7\u8868\u793a\u3084\u66dc\u65e5\u306e\u65e5\u672c\u8a9e\u5316\u306a\u3069\u3001\u72ec\u81ea\u306e\u8981\u4ef6\u304c\u3042\u308a\u3001\u6b63\u78ba\u306a\u5b9f\u88c5\u306b\u306f\u7d30\u5fc3\u306e\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u672c\u8a18\u4e8b\u3067\u306f\u3001PHP\u3067\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u95a2\u3059\u308b\u57fa\u672c\u304b\u3089\u5fdc\u7528\u307e\u3067\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3059\u3050\u306b\u6d3b\u7528\u3067\u304d\u308b10\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002date()\u95a2\u6570\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u304b\u3089\u3001PHP 8\u306e\u6700\u65b0\u6a5f\u80fd\u3001\u65e5\u672c\u8a9e\u8868\u793a\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3001\u56fd\u969b\u5316\u5bfe\u5fdc\u307e\u3067\u5e45\u5e83\u304f\u30ab\u30d0\u30fc\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u300c\u306a\u305c\u304b\u65e5\u4ed8\u304c\u305a\u308c\u308b\u300d\u300c\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u8a2d\u5b9a\u304c\u3046\u307e\u304f\u3044\u304b\u306a\u3044\u300d\u300c\u548c\u66a6\u5bfe\u5fdc\u3067\u8e93\u3044\u3066\u3044\u308b\u300d\u3068\u3044\u3063\u305f\u60a9\u307f\u3092\u62b1\u3048\u308b\u958b\u767a\u8005\u306e\u65b9\u3005\u306b\u3001\u3053\u306e\u8a18\u4e8b\u304c\u89e3\u6c7a\u306e\u7cf8\u53e3\u306b\u306a\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u305d\u308c\u3067\u306f\u3001PHP\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u81ea\u5728\u306b\u64cd\u308b\u305f\u3081\u306e\u77e5\u8b58\u3068\u30c6\u30af\u30cb\u30c3\u30af\u3092\u3001\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3068\u3068\u3082\u306b\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">PHP\u306b\u304a\u3051\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u57fa\u672c<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">date()\u95a2\u6570\u306e\u4f7f\u3044\u65b9\u3068\u4e3b\u8981\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6587\u5b57\u4e00\u89a7<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">DateTime \u30af\u30e9\u30b9\u306b\u3088\u308b\u65e5\u4ed8\u64cd\u4f5c\u306e\u57fa\u790e\u77e5\u8b58<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-5\">\u5b9f\u52d9\u3067\u4f7f\u3048\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u5b9f\u8df5\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-6\">\u65e5\u672c\u8a9e\u306e\u5e74\u6708\u65e5\u8868\u793a\uff08\u4ee4\u548c\u30fb\u5e73\u6210\u5bfe\u5fdc\u3082\u542b\u3080\uff09\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-9\">\u66dc\u65e5\u3092\u65e5\u672c\u8a9e\u3067\u8868\u793a\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">\u6642\u9593\u8868\u8a18\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u3068\u4f7f\u3044\u5206\u3051<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30a8\u30e9\u30fc\u56de\u907f\u3068\u30c7\u30d0\u30c3\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u30df\u30b9\u306b\u3088\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u89e3\u6c7a\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">\u7121\u52b9\u306a\u65e5\u4ed8\u5165\u529b\u306b\u5bfe\u3059\u308b\u5805\u7262\u306a\u51e6\u7406\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-27\">\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5b9f\u88c5\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-28\">IntlDateFormatter \u3092\u6d3b\u7528\u3057\u305f\u591a\u8a00\u8a9e\u5bfe\u5fdc\u306e\u5b9f\u8df5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-32\">\u30ed\u30b1\u30fc\u30eb\u306b\u5fdc\u3058\u305f\u65e5\u4ed8\u8868\u793a\u306e\u5207\u308a\u66ff\u3048\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-36\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u65e5\u4ed8\u51e6\u7406\u306e\u6700\u9069\u5316<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-37\">\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u51e6\u7406\u306e\u9ad8\u901f\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-42\">\u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406\u6642\u306e\u65e5\u4ed8\u64cd\u4f5c\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-47\">PHP 8.0\u4ee5\u964d\u3067\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u65b0\u6a5f\u80fd\u3068\u6539\u5584\u70b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-48\">PHP 8\u306e\u65e5\u4ed8\u51e6\u7406\u306b\u304a\u3051\u308b\u5909\u66f4\u70b9\u3068\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-54\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u4f7f\u3048\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-59\">\u5b9f\u88c5\u4f8b\u3067\u5b66\u3076\uff1a\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u5b9f\u8df5\u7684\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-60\">\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306b\u304a\u3051\u308b\u65e5\u6642\u8868\u793a\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-64\">\u30ed\u30b0\u51fa\u529b\u3084\u30c7\u30fc\u30bf\u5206\u6790\u3067\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6d3b\u7528\u8853<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-68\">\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u95a2\u3059\u308b\u3088\u304f\u3042\u308b\u8cea\u554f\u3068\u56de\u7b54<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-69\">\u300c\u5348\u524d\/\u5348\u5f8c\u300d\u306e\u8868\u793a\u65b9\u6cd5\u306b\u3064\u3044\u3066<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-75\">\u548c\u66a6\u3068\u897f\u66a6\u306e\u76f8\u4e92\u5909\u63db\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-80\">\u307e\u3068\u3081\uff1aPHP\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-81\">\u30b7\u30fc\u30f3\u5225\u304a\u3059\u3059\u3081\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u8a2d\u5b9a\u4e00\u89a7<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-82\">\u4eca\u5f8c\u306e\u958b\u767a\u306b\u6d3b\u304b\u305b\u308b\u65e5\u4ed8\u51e6\u7406\u306e\u8a2d\u8a08\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">PHP\u306b\u304a\u3051\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u57fa\u672c<\/h2>\n\n\n\n<p>PHP\u3067\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u6271\u3046\u306b\u306f\u4e3b\u306b2\u3064\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u3042\u308a\u307e\u3059\u3002\u5f93\u6765\u306edate()\u95a2\u6570\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\u3068\u3001\u3088\u308a\u67d4\u8edf\u3067\u6a5f\u80fd\u304c\u8c4a\u5bcc\u306aDateTime\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u7279\u5fb4\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">date()\u95a2\u6570\u306e\u4f7f\u3044\u65b9\u3068\u4e3b\u8981\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6587\u5b57\u4e00\u89a7<\/h3>\n\n\n\n<p><code>date()<\/code>\u95a2\u6570\u306f\u3001PHP\u3067\u65e5\u4ed8\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3059\u308b\u6700\u3082\u57fa\u672c\u7684\u306a\u65b9\u6cd5\u3067\u3001\u6b21\u306e\u3088\u3046\u306a\u69cb\u6587\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">string date(string $format, ?int $timestamp = null)\n<\/pre>\n\n\n\n<p>\u7b2c\u4e00\u5f15\u6570\u306e<code>$format<\/code>\u306b\u306f\u3001\u8868\u793a\u3057\u305f\u3044\u65e5\u4ed8\u306e\u5f62\u5f0f\u3092\u6307\u5b9a\u3057\u3001\u7b2c\u4e8c\u5f15\u6570\u306e<code>$timestamp<\/code>\u306b\u306f\u3001UNIX\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<code>$timestamp<\/code>\u3092\u7701\u7565\u3057\u305f\u5834\u5408\u306f\u3001\u73fe\u5728\u306e\u6642\u523b\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-2\">\u4e3b\u8981\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6587\u5b57\u4e00\u89a7<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306b\u3001\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6587\u5b57\u3068\u305d\u306e\u610f\u5473\u3092\u8868\u306b\u307e\u3068\u3081\u307e\u3057\u305f\u3002<\/p>\n\n\n<div id=\"id-44f0140b-c3e6-4153-9e6c-a079e52dd5d6\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6587\u5b57<\/th><th>\u8aac\u660e<\/th><th>\u4f8b<\/th><\/tr><\/thead><tbody><tr><td>Y<\/td><td>4\u6841\u306e\u5e74\uff08\u897f\u66a6\uff09<\/td><td>2023<\/td><\/tr><tr><td>y<\/td><td>2\u6841\u306e\u5e74<\/td><td>23<\/td><\/tr><tr><td>m<\/td><td>0\u57cb\u3081\u306e\u6708\uff0801\u301c12\uff09<\/td><td>01, 12<\/td><\/tr><tr><td>n<\/td><td>0\u57cb\u3081\u306a\u3057\u306e\u6708\uff081\u301c12\uff09<\/td><td>1, 12<\/td><\/tr><tr><td>d<\/td><td>0\u57cb\u3081\u306e\u65e5\uff0801\u301c31\uff09<\/td><td>01, 31<\/td><\/tr><tr><td>j<\/td><td>0\u57cb\u3081\u306a\u3057\u306e\u65e5\uff081\u301c31\uff09<\/td><td>1, 31<\/td><\/tr><tr><td>H<\/td><td>24\u6642\u9593\u5f62\u5f0f\u306e\u6642\uff0800\u301c23\uff09<\/td><td>00, 23<\/td><\/tr><tr><td>h<\/td><td>12\u6642\u9593\u5f62\u5f0f\u306e\u6642\uff0801\u301c12\uff09<\/td><td>01, 12<\/td><\/tr><tr><td>i<\/td><td>\u5206\uff0800\u301c59\uff09<\/td><td>00, 59<\/td><\/tr><tr><td>s<\/td><td>\u79d2\uff0800\u301c59\uff09<\/td><td>00, 59<\/td><\/tr><tr><td>a<\/td><td>\u5348\u524d\u307e\u305f\u306f\u5348\u5f8c\uff08\u5c0f\u6587\u5b57\uff09<\/td><td>am, pm<\/td><\/tr><tr><td>A<\/td><td>\u5348\u524d\u307e\u305f\u306f\u5348\u5f8c\uff08\u5927\u6587\u5b57\uff09<\/td><td>AM, PM<\/td><\/tr><tr><td>l<\/td><td>\u66dc\u65e5\uff08\u30d5\u30eb\u30b9\u30da\u30eb\uff09<\/td><td>Sunday, Monday<\/td><\/tr><tr><td>D<\/td><td>\u66dc\u65e5\uff083\u6587\u5b57\uff09<\/td><td>Sun, Mon<\/td><\/tr><tr><td>w<\/td><td>\u66dc\u65e5\uff08\u6570\u5024\uff09\uff080=\u65e5\u66dc, 6=\u571f\u66dc\uff09<\/td><td>0, 6<\/td><\/tr><tr><td>z<\/td><td>\u5e74\u9593\u306e\u901a\u7b97\u65e5\uff080\u301c365\uff09<\/td><td>0, 365<\/td><\/tr><tr><td>W<\/td><td>ISO-8601\u5f62\u5f0f\u306e\u9031\u756a\u53f7<\/td><td>42<\/td><\/tr><tr><td>t<\/td><td>\u6307\u5b9a\u6708\u306e\u65e5\u6570<\/td><td>28, 31<\/td><\/tr><tr><td>L<\/td><td>\u3046\u308b\u3046\u5e74\u304b\u3069\u3046\u304b\uff081=\u3046\u308b\u3046\u5e74\uff09<\/td><td>0, 1<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u6587\u5b57\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5fc5\u8981\u306a\u65e5\u4ed8\u5f62\u5f0f\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u73fe\u5728\u306e\u65e5\u4ed8\u3092\u300c2023\u5e7412\u670831\u65e5\u300d\u306e\u5f62\u5f0f\u3067\u8868\u793a\necho date('Y\u5e74m\u6708d\u65e5'); \/\/ \u4f8b: 2023\u5e7412\u670831\u65e5\n\n\/\/ \u73fe\u5728\u306e\u65e5\u6642\u3092\u300c2023\/12\/31 23:59:59\u300d\u306e\u5f62\u5f0f\u3067\u8868\u793a\necho date('Y\/m\/d H:i:s'); \/\/ \u4f8b: 2023\/12\/31 23:59:59\n\n\/\/ \u7279\u5b9a\u306e\u65e5\u4ed8\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\uff08UNIX\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u4f7f\u7528\uff09\n$timestamp = mktime(0, 0, 0, 12, 31, 2023);\necho date('Y-m-d', $timestamp); \/\/ \u4f8b: 2023-12-31\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">DateTime \u30af\u30e9\u30b9\u306b\u3088\u308b\u65e5\u4ed8\u64cd\u4f5c\u306e\u57fa\u790e\u77e5\u8b58<\/h3>\n\n\n\n<p>PHP 5.2\u4ee5\u964d\u3067\u306f\u3001\u3088\u308a\u67d4\u8edf\u306a\u65e5\u4ed8\u64cd\u4f5c\u304c\u53ef\u80fd\u306a<code>DateTime<\/code>\u30af\u30e9\u30b9\u304c\u6a19\u6e96\u3067\u5229\u7528\u3067\u304d\u307e\u3059\u3002<code>date()<\/code>\u95a2\u6570\u3068\u6bd4\u8f03\u3057\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/li>\n\n\n\n<li>\u65e5\u4ed8\u306e\u52a0\u7b97\u30fb\u6e1b\u7b97\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u64cd\u4f5c\u304c\u30b7\u30f3\u30d7\u30eb<\/li>\n\n\n\n<li>\u65e5\u4ed8\u6bd4\u8f03\u304c\u76f4\u611f\u7684<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u73fe\u5728\u306e\u65e5\u6642\u3067DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\n$date = new DateTime();\n\n\/\/ \u7279\u5b9a\u306e\u65e5\u6642\u3067\u521d\u671f\u5316\n$date = new DateTime('2023-12-31 23:59:59');\n\n\/\/ \u7279\u5b9a\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u6307\u5b9a\n$date = new DateTime('now', new DateTimeZone('Asia\/Tokyo'));\n\n\/\/ \u65e5\u4ed8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u4f8b: 2023-12-31 23:59:59\n\n\/\/ \u65e5\u4ed8\u306e\u52a0\u7b97\n$date-&gt;modify('+1 day');\n\/\/ \u307e\u305f\u306f\n$date-&gt;add(new DateInterval('P1D')); \/\/ 1\u65e5\u8ffd\u52a0\n\n\/\/ \u65e5\u4ed8\u306e\u6e1b\u7b97\n$date-&gt;modify('-1 month');\n\/\/ \u307e\u305f\u306f\n$date-&gt;sub(new DateInterval('P1M')); \/\/ 1\u30f6\u6708\u6e1b\u7b97\n\n\/\/ \u65e5\u4ed8\u306e\u6bd4\u8f03\n$date1 = new DateTime('2023-01-01');\n$date2 = new DateTime('2023-12-31');\nif ($date1 &lt; $date2) {\n    echo 'date1\u306fdate2\u3088\u308a\u524d\u306e\u65e5\u4ed8\u3067\u3059';\n}\n\n\/\/ \u65e5\u4ed8\u306e\u5dee\u5206\u3092\u8a08\u7b97\n$diff = $date1-&gt;diff($date2);\necho $diff-&gt;format('%R%a\u65e5'); \/\/ \u4f8b: +364\u65e5\n<\/pre>\n\n\n\n<p>PHP 7.1\u4ee5\u964d\u3067\u306f\u3001\u30a4\u30df\u30e5\u30fc\u30bf\u30d6\u30eb\uff08\u4e0d\u5909\uff09\u306a\u65e5\u4ed8\u64cd\u4f5c\u304c\u53ef\u80fd\u306a<code>DateTimeImmutable<\/code>\u30af\u30e9\u30b9\u3082\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u65e5\u4ed8\u64cd\u4f5c\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3059\u3068\u3001\u5143\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u5909\u66f4\u3055\u308c\u305a\u3001\u65b0\u3057\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u8fd4\u3055\u308c\u308b\u305f\u3081\u3001\u610f\u56f3\u3057\u306a\u3044\u5909\u66f4\u3092\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$date = new DateTimeImmutable('2023-12-31');\n$newDate = $date-&gt;modify('+1 day'); \/\/ $date\u306f\u5909\u66f4\u3055\u308c\u305a\u3001\u65b0\u3057\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8$newDate\u304c\u751f\u6210\u3055\u308c\u308b\n\necho $date-&gt;format('Y-m-d'); \/\/ 2023-12-31\uff08\u5909\u66f4\u3055\u308c\u3066\u3044\u306a\u3044\uff09\necho $newDate-&gt;format('Y-m-d'); \/\/ 2024-01-01\uff08\u65b0\u3057\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n<\/pre>\n\n\n\n<p>PHP\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u57fa\u672c\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u8907\u96d1\u306a\u65e5\u4ed8\u64cd\u4f5c\u3082\u9806\u756a\u306b\u7406\u89e3\u3057\u3066\u3044\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u52d9\u3067\u5f79\u7acb\u3064\u5177\u4f53\u7684\u306a\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-5\">\u5b9f\u52d9\u3067\u4f7f\u3048\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u5b9f\u8df5\u30d1\u30bf\u30fc\u30f3<\/h2>\n\n\n\n<p>\u65e5\u672c\u306e Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u3067\u306f\u3001\u65e5\u672c\u8a9e\u7279\u6709\u306e\u65e5\u4ed8\u8868\u793a\u8981\u4ef6\u306b\u5bfe\u5fdc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u52d9\u3067\u3088\u304f\u4f7f\u308f\u308c\u308b\u65e5\u672c\u8a9e\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30d1\u30bf\u30fc\u30f3\u3068\u3001\u305d\u306e\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u65e5\u672c\u8a9e\u306e\u5e74\u6708\u65e5\u8868\u793a\uff08\u4ee4\u548c\u30fb\u5e73\u6210\u5bfe\u5fdc\u3082\u542b\u3080\uff09\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">\u4e00\u822c\u7684\u306a\u65e5\u672c\u8a9e\u306e\u5e74\u6708\u65e5\u8868\u793a<\/h4>\n\n\n\n<p>\u307e\u305a\u306f\u57fa\u672c\u7684\u306a\u65e5\u672c\u8a9e\u306e\u5e74\u6708\u65e5\u8868\u793a\u30d1\u30bf\u30fc\u30f3\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ 2023\u5e7412\u670831\u65e5 \u5f62\u5f0f\necho date('Y\u5e74m\u6708d\u65e5');\n\n\/\/ \u533a\u5207\u308a\u6587\u5b57\u3092\u5909\u3048\u308b\u5834\u5408\necho date('Y\/m\/d'); \/\/ 2023\/12\/31\necho date('Y.m.d'); \/\/ 2023.12.31\necho date('Y-m-d'); \/\/ 2023-12-31\n\n\/\/ DateTime \u30af\u30e9\u30b9\u3092\u4f7f\u3046\u5834\u5408\n$date = new DateTime();\necho $date-&gt;format('Y\u5e74m\u6708d\u65e5'); \/\/ 2023\u5e7412\u670831\u65e5\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">\u548c\u66a6\uff08\u4ee4\u548c\u30fb\u5e73\u6210\u306a\u3069\uff09\u306e\u8868\u793a<\/h4>\n\n\n\n<p>\u548c\u66a6\u3092\u8868\u793a\u3059\u308b\u306b\u306f\u3001\u897f\u66a6\u304b\u3089\u548c\u66a6\u3078\u306e\u5909\u63db\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002PHP\u306e\u6a19\u6e96\u95a2\u6570\u3060\u3051\u3067\u306f\u76f4\u63a5\u548c\u66a6\u3092\u51fa\u529b\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u72ec\u81ea\u306e\u95a2\u6570\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u897f\u66a6\u3092\u548c\u66a6\u306b\u5909\u63db\u3059\u308b\u95a2\u6570\n * \n * @param string|int|DateTime $date \u65e5\u4ed8\uff08\u6587\u5b57\u5217\u3001\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3001DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n * @return string \u548c\u66a6\uff08\u4f8b: \u4ee4\u548c5\u5e7412\u670831\u65e5\uff09\n *\/\nfunction convertToJapaneseEra($date = 'now') {\n    \/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u7d71\u4e00\n    if (is_string($date) &amp;&amp; !is_numeric($date)) {\n        $dateTime = new DateTime($date);\n    } elseif (is_numeric($date)) {\n        $dateTime = (new DateTime())-&gt;setTimestamp($date);\n    } elseif ($date instanceof DateTime) {\n        $dateTime = $date;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    $year = (int)$dateTime-&gt;format('Y');\n    $month = (int)$dateTime-&gt;format('m');\n    $day = (int)$dateTime-&gt;format('d');\n    \n    \/\/ \u5143\u53f7\u306e\u5b9a\u7fa9\uff08\u958b\u59cb\u65e5\u4ed8\u3068\u5143\u53f7\u540d\uff09\n    $eras = [\n        ['date' =&gt; '2019-05-01', 'name' =&gt; '\u4ee4\u548c', 'abbr' =&gt; 'R'],\n        ['date' =&gt; '1989-01-08', 'name' =&gt; '\u5e73\u6210', 'abbr' =&gt; 'H'],\n        ['date' =&gt; '1926-12-25', 'name' =&gt; '\u662d\u548c', 'abbr' =&gt; 'S'],\n        ['date' =&gt; '1912-07-30', 'name' =&gt; '\u5927\u6b63', 'abbr' =&gt; 'T'],\n        ['date' =&gt; '1868-01-25', 'name' =&gt; '\u660e\u6cbb', 'abbr' =&gt; 'M'],\n    ];\n    \n    \/\/ \u65e5\u4ed8\u3092\u6bd4\u8f03\u3057\u3066\u9069\u5207\u306a\u5143\u53f7\u3092\u6c7a\u5b9a\n    $targetDate = $dateTime-&gt;format('Y-m-d');\n    $eraName = '';\n    $eraYear = 0;\n    \n    foreach ($eras as $era) {\n        if ($targetDate &gt;= $era['date']) {\n            $eraName = $era['name'];\n            $eraStartDate = new DateTime($era['date']);\n            $eraYear = $year - $eraStartDate-&gt;format('Y') + 1;\n            break;\n        }\n    }\n    \n    \/\/ \u5143\u53f7\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\uff081868\u5e74\u4ee5\u524d\uff09\u306f\u897f\u66a6\u3092\u8fd4\u3059\n    if (empty($eraName)) {\n        return \"{$year}\u5e74{$month}\u6708{$day}\u65e5\";\n    }\n    \n    \/\/ \u5143\u53f71\u5e74\u306f\u300c\u5143\u5e74\u300d\u3068\u8868\u8a18\u3059\u308b\u6163\u7fd2\u306b\u5bfe\u5fdc\n    $eraYearStr = ($eraYear === 1) ? '\u5143' : $eraYear;\n    \n    return \"{$eraName}{$eraYearStr}\u5e74{$month}\u6708{$day}\u65e5\";\n}\n\n\/\/ \u4f7f\u7528\u4f8b\necho convertToJapaneseEra('2023-12-31'); \/\/ \u4ee4\u548c5\u5e7412\u670831\u65e5\necho convertToJapaneseEra('1989-01-08'); \/\/ \u5e73\u6210\u5143\u5e741\u67088\u65e5\necho convertToJapaneseEra('1989-01-07'); \/\/ \u662d\u548c64\u5e741\u67087\u65e5\n<\/pre>\n\n\n\n<p>\u548c\u66a6\u306e\u7c21\u6613\u8868\u8a18\uff08R5.12.31\u306a\u3069\uff09\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u4e0a\u8a18\u306e\u95a2\u6570\u3092\u5c11\u3057\u4fee\u6b63\u3059\u308c\u3070\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u66dc\u65e5\u3092\u65e5\u672c\u8a9e\u3067\u8868\u793a\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u82f1\u8a9e\u306e\u66dc\u65e5\u3092\u65e5\u672c\u8a9e\u306b\u5909\u63db\u3059\u308b\u305f\u3081\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">\u914d\u5217\u3092\u4f7f\u7528\u3057\u305f\u5909\u63db\u65b9\u6cd5<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u66dc\u65e5\u3092\u65e5\u672c\u8a9e\u306b\u5909\u63db\u3059\u308b\u95a2\u6570\n * \n * @param string|int|DateTime $date \u65e5\u4ed8\n * @param bool $short \u7701\u7565\u5f62\u3067\u8fd4\u3059\u304b\uff08true: \u6708, false: \u6708\u66dc\u65e5\uff09\n * @return string \u65e5\u672c\u8a9e\u306e\u66dc\u65e5\n *\/\nfunction getJapaneseWeekday($date = 'now', $short = false) {\n    \/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u7d71\u4e00\n    if (is_string($date) &amp;&amp; !is_numeric($date)) {\n        $dateTime = new DateTime($date);\n    } elseif (is_numeric($date)) {\n        $dateTime = (new DateTime())-&gt;setTimestamp($date);\n    } elseif ($date instanceof DateTime) {\n        $dateTime = $date;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    \/\/ \u66dc\u65e5\u306e\u914d\u5217\uff080:\u65e5\u66dc\u65e5 \uff5e 6:\u571f\u66dc\u65e5\uff09\n    $weekdays = [\n        '\u65e5\u66dc\u65e5', '\u6708\u66dc\u65e5', '\u706b\u66dc\u65e5', '\u6c34\u66dc\u65e5', '\u6728\u66dc\u65e5', '\u91d1\u66dc\u65e5', '\u571f\u66dc\u65e5'\n    ];\n    $shortWeekdays = ['\u65e5', '\u6708', '\u706b', '\u6c34', '\u6728', '\u91d1', '\u571f'];\n    \n    $w = (int)$dateTime-&gt;format('w');\n    \n    return $short ? $shortWeekdays[$w] : $weekdays[$w];\n}\n\n\/\/ \u4f7f\u7528\u4f8b\necho date('Y\u5e74m\u6708d\u65e5') . '\uff08' . getJapaneseWeekday('now', true) . '\uff09'; \/\/ 2023\u5e7412\u670831\u65e5\uff08\u65e5\uff09\necho date('Y\u5e74m\u6708d\u65e5') . getJapaneseWeekday(); \/\/ 2023\u5e7412\u670831\u65e5\u65e5\u66dc\u65e5\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-11\">\u65e5\u4ed8\u3068\u66dc\u65e5\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u5b8c\u5168\u306a\u8868\u793a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u65e5\u4ed8\u3068\u66dc\u65e5\u3092\u65e5\u672c\u8a9e\u3067\u8868\u793a\u3059\u308b\u95a2\u6570\n * \n * @param string|int|DateTime $date \u65e5\u4ed8\n * @param string $format \u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\uff08Y\u5e74m\u6708d\u65e5 \u306a\u3069\uff09\n * @param bool $short \u66dc\u65e5\u3092\u7701\u7565\u5f62\u3067\u8fd4\u3059\u304b\n * @return string \u65e5\u672c\u8a9e\u306e\u65e5\u4ed8\u3068\u66dc\u65e5\n *\/\nfunction formatJapaneseDate($date = 'now', $format = 'Y\u5e74m\u6708d\u65e5', $short = true) {\n    \/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u7d71\u4e00\n    if (is_string($date) &amp;&amp; !is_numeric($date)) {\n        $dateTime = new DateTime($date);\n    } elseif (is_numeric($date)) {\n        $dateTime = (new DateTime())-&gt;setTimestamp($date);\n    } elseif ($date instanceof DateTime) {\n        $dateTime = $date;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    $formattedDate = $dateTime-&gt;format($format);\n    $weekday = getJapaneseWeekday($dateTime, $short);\n    \n    return $formattedDate . '\uff08' . $weekday . '\uff09';\n}\n\n\/\/ \u4f7f\u7528\u4f8b\necho formatJapaneseDate(); \/\/ 2023\u5e7412\u670831\u65e5\uff08\u65e5\uff09\necho formatJapaneseDate('2023-01-01', 'Y\/m\/d', false); \/\/ 2023\/01\/01\uff08\u65e5\u66dc\u65e5\uff09\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u6642\u9593\u8868\u8a18\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u3068\u4f7f\u3044\u5206\u3051<\/h3>\n\n\n\n<p>\u65e5\u672c\u8a9e\u306e\u6642\u9593\u8868\u8a18\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u304c\u3042\u308a\u3001\u7528\u9014\u306b\u5fdc\u3058\u3066\u4f7f\u3044\u5206\u3051\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">24\u6642\u9593\u8868\u8a18\u306812\u6642\u9593\u8868\u8a18<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ 24\u6642\u9593\u8868\u8a18\uff0814:30:00\uff09\necho date('H:i:s'); \n\n\/\/ 12\u6642\u9593\u8868\u8a18\uff08\u5348\u5f8c2\u664230\u520600\u79d2\uff09\nfunction formatJapaneseTime($time = 'now') {\n    if (is_string($time) &amp;&amp; !is_numeric($time)) {\n        $dateTime = new DateTime($time);\n    } elseif (is_numeric($time)) {\n        $dateTime = (new DateTime())-&gt;setTimestamp($time);\n    } elseif ($time instanceof DateTime) {\n        $dateTime = $time;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    $hour = (int)$dateTime-&gt;format('G'); \/\/ 0-23 \u306e\u6642\u9593\n    $ampm = $hour &lt; 12 ? '\u5348\u524d' : '\u5348\u5f8c';\n    $hour12 = $hour % 12;\n    if ($hour12 === 0) $hour12 = 12;\n    \n    return $ampm . $hour12 . '\u6642' . $dateTime-&gt;format('i') . '\u5206' . $dateTime-&gt;format('s') . '\u79d2';\n}\n\necho formatJapaneseTime('14:30:00'); \/\/ \u5348\u5f8c2\u664230\u520600\u79d2\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">\u6642\u9593\u8868\u8a18\u306e\u4f7f\u3044\u5206\u3051<\/h4>\n\n\n<div id=\"id-58e70b5a-611e-4e25-851e-ca9623afc420\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u8868\u8a18\u65b9\u6cd5<\/th><th>\u4f7f\u7528\u4f8b<\/th><th>\u9069\u3057\u305f\u7528\u9014<\/th><\/tr><\/thead><tbody><tr><td>24\u6642\u9593\u8868\u8a18\uff0814:30\uff09<\/td><td>\u30b7\u30b9\u30c6\u30e0\u30ed\u30b0\u3001\u5185\u90e8\u51e6\u7406<\/td><td>\u6280\u8853\u7684\u306a\u6587\u8108\u3084\u6b63\u78ba\u3055\u304c\u6c42\u3081\u3089\u308c\u308b\u5834\u5408<\/td><\/tr><tr><td>12\u6642\u9593\u8868\u8a18\uff08\u5348\u5f8c2:30\uff09<\/td><td>\u30e6\u30fc\u30b6\u30fc\u5411\u3051\u8868\u793a<\/td><td>\u4e00\u822c\u30e6\u30fc\u30b6\u30fc\u5411\u3051\u306e\u8868\u793a\u3067\u89aa\u3057\u307f\u3084\u3059\u3055\u304c\u6c42\u3081\u3089\u308c\u308b\u5834\u5408<\/td><\/tr><tr><td>\u6f22\u5b57\u8868\u8a18\uff08\u5348\u5f8c2\u664230\u5206\uff09<\/td><td>\u516c\u5f0f\u6587\u66f8\u3001\u30d5\u30a9\u30fc\u30de\u30eb\u306a\u8868\u793a<\/td><td>\u6b63\u5f0f\u306a\u6587\u66f8\u3084\u4e01\u5be7\u306a\u8868\u73fe\u304c\u6c42\u3081\u3089\u308c\u308b\u5834\u5408<\/td><\/tr><tr><td>\u7701\u7565\u5f62\uff0814\u664230\u5206\u9803\uff09<\/td><td>\u30ab\u30b8\u30e5\u30a2\u30eb\u306a\u8868\u793a<\/td><td>\u30d6\u30ed\u30b0\u3084SNS\u306a\u3069\u3001\u304f\u3060\u3051\u305f\u8868\u73fe\u304c\u9069\u3057\u3066\u3044\u308b\u5834\u5408<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306e\u8868\u793a\u4f8b\n$reservationDate = new DateTime('2023-12-15 14:30:00');\necho '\u4e88\u7d04\u65e5\u6642: ' . formatJapaneseDate($reservationDate, 'Y\u5e74m\u6708d\u65e5') . ' ' . formatJapaneseTime($reservationDate);\n\/\/ \u51fa\u529b: \u4e88\u7d04\u65e5\u6642: 2023\u5e7412\u670815\u65e5\uff08\u91d1\uff09 \u5348\u5f8c2\u664230\u520600\u79d2\n\n\/\/ \u30ed\u30b0\u51fa\u529b\u306e\u4f8b\n$logDate = new DateTime();\necho '\u30ed\u30b0\u8a18\u9332\u6642\u9593: ' . $logDate-&gt;format('Y-m-d H:i:s.u');\n\/\/ \u51fa\u529b: \u30ed\u30b0\u8a18\u9332\u6642\u9593: 2023-12-31 23:59:59.123456\n<\/pre>\n\n\n\n<p>\u5b9f\u52d9\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30d1\u30bf\u30fc\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u69d8\u3005\u306a\u7528\u9014\u306b\u5bfe\u5fdc\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u95a2\u9023\u3059\u308b\u30a8\u30e9\u30fc\u56de\u907f\u3068\u30c7\u30d0\u30c3\u30b0\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30a8\u30e9\u30fc\u56de\u907f\u3068\u30c7\u30d0\u30c3\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<p>\u65e5\u4ed8\u51e6\u7406\u306f\u4e00\u898b\u30b7\u30f3\u30d7\u30eb\u306b\u898b\u3048\u3066\u610f\u5916\u306a\u843d\u3068\u3057\u7a74\u304c\u591a\u3044\u9818\u57df\u3067\u3059\u3002\u7279\u306b\u3001\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u6271\u3044\u3084\u7121\u52b9\u306a\u65e5\u4ed8\u5165\u529b\u306f\u3001\u591a\u304f\u306e\u958b\u767a\u8005\u304c\u76f4\u9762\u3059\u308b\u554f\u984c\u3067\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u95a2\u9023\u3059\u308b\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u306e\u56de\u907f\u65b9\u6cd5\u3068\u30c7\u30d0\u30c3\u30b0\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u30df\u30b9\u306b\u3088\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u89e3\u6c7a\u7b56<\/h3>\n\n\n\n<p>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u8a2d\u5b9a\u30df\u30b9\u306f\u3001\u65e5\u4ed8\u304c\u6570\u6642\u9593\u305a\u308c\u305f\u308a\u3001\u65e5\u4ed8\u304c\u7570\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u308a\u3059\u308b\u539f\u56e0\u306b\u306a\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u554f\u984c\u3068\u89e3\u6c7a\u7b56\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u306e\u78ba\u8a8d\u65b9\u6cd5<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u73fe\u5728\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u78ba\u8a8d\necho \"\u73fe\u5728\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3: \" . date_default_timezone_get() . \"\\n\";\n\n\/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306e\u6319\u52d5\u3092\u78ba\u8a8d\nif (ini_get('date.timezone') === '') {\n    echo \"php.ini\u3067\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-19\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u306e\u6b63\u3057\u3044\u65b9\u6cd5<\/h4>\n\n\n\n<p>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306f\u3001\u4ee5\u4e0b\u306e3\u3064\u306e\u65b9\u6cd5\u3067\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff08\u512a\u5148\u9806\u4f4d\u9806\uff09\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9f\u884c\u6642\u306bPHP\u30b3\u30fc\u30c9\u5185\u3067\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5148\u982d\u3067\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\ndate_default_timezone_set('Asia\/Tokyo');\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>php.ini\u30d5\u30a1\u30a4\u30eb\u3067\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">date.timezone = Asia\/Tokyo\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>PHP\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u30b5\u30fc\u30d0\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u30b3\u30fc\u30c9\u306e\u5148\u982d\u3067\u660e\u793a\u7684\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\u3059\u308b\u306e\u304c\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u74b0\u5883\u304c\u5909\u308f\u3063\u3066\u3082\u4e00\u8cab\u3057\u305f\u52d5\u4f5c\u3092\u4fdd\u8a3c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-20\">\u30de\u30eb\u30c1\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u5bfe\u5fdc\u306e\u5b9f\u88c5\u4f8b<\/h4>\n\n\n\n<p>\u7570\u306a\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u65e5\u6642\u3092\u6271\u3046\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001DateTime\u30af\u30e9\u30b9\u3068 DateTimeZone\u30af\u30e9\u30b9\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u6771\u4eac\u6642\u9593\u306e\u73fe\u5728\u65e5\u6642\u3092\u53d6\u5f97\n$tokyoTime = new DateTime('now', new DateTimeZone('Asia\/Tokyo'));\necho \"\u6771\u4eac: \" . $tokyoTime-&gt;format('Y-m-d H:i:s') . \"\\n\";\n\n\/\/ \u30cb\u30e5\u30fc\u30e8\u30fc\u30af\u6642\u9593\u306b\u5909\u63db\n$tokyoTime-&gt;setTimezone(new DateTimeZone('America\/New_York'));\necho \"\u30cb\u30e5\u30fc\u30e8\u30fc\u30af: \" . $tokyoTime-&gt;format('Y-m-d H:i:s') . \"\\n\";\n\n\/\/ \u7570\u306a\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u65e5\u6642\u3092\u6bd4\u8f03\u3059\u308b\u5834\u5408\n$tokyoTime = new DateTime('2023-12-31 23:00:00', new DateTimeZone('Asia\/Tokyo'));\n$nyTime = new DateTime('2023-12-31 09:00:00', new DateTimeZone('America\/New_York'));\n\n\/\/ \u5185\u90e8\u7684\u306bUTC\u306b\u5909\u63db\u3057\u3066\u6bd4\u8f03\u3059\u308b\u306e\u3067\u3001\u6b63\u3057\u304f\u6bd4\u8f03\u3067\u304d\u308b\nif ($tokyoTime == $nyTime) {\n    echo \"\u540c\u3058\u6642\u523b\u3067\u3059\\n\"; \/\/ \u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u308b\n} else {\n    echo \"\u7570\u306a\u308b\u6642\u523b\u3067\u3059\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u30c7\u30d0\u30c3\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/h4>\n\n\n\n<p>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u95a2\u9023\u306e\u554f\u984c\u3092\u30c7\u30d0\u30c3\u30b0\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u30c6\u30af\u30cb\u30c3\u30af\u304c\u6709\u52b9\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u65e5\u4ed8\u3068\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u4e21\u65b9\u3092\u51fa\u529b\nfunction debugDateTime($dateTime) {\n    if (!($dateTime instanceof DateTime)) {\n        $dateTime = new DateTime($dateTime);\n    }\n    \n    echo \"\u65e5\u6642: \" . $dateTime-&gt;format('Y-m-d H:i:s') . \"\\n\";\n    echo \"\u30bf\u30a4\u30e0\u30be\u30fc\u30f3: \" . $dateTime-&gt;getTimezone()-&gt;getName() . \"\\n\";\n    echo \"UTC\u30aa\u30d5\u30bb\u30c3\u30c8: \" . $dateTime-&gt;format('P') . \"\\n\";\n    echo \"UNIX\u6642\u9593: \" . $dateTime-&gt;format('U') . \"\\n\";\n    echo \"----------------\\n\";\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ndebugDateTime('now');\ndebugDateTime(new DateTime('2023-12-31', new DateTimeZone('Europe\/London')));\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u7121\u52b9\u306a\u65e5\u4ed8\u5165\u529b\u306b\u5bfe\u3059\u308b\u5805\u7262\u306a\u51e6\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u3057\u305f\u65e5\u4ed8\u30c7\u30fc\u30bf\u306f\u3001\u5fc5\u305a\u3057\u3082\u6709\u52b9\u306a\u5f62\u5f0f\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002\u7121\u52b9\u306a\u65e5\u4ed8\u5165\u529b\u306b\u5bfe\u3057\u3066\u3082\u5805\u7262\u306b\u52d5\u4f5c\u3059\u308b\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">\u65e5\u4ed8\u306e\u59a5\u5f53\u6027\u691c\u8a3c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u65e5\u4ed8\u6587\u5b57\u5217\u304c\u6709\u52b9\u304b\u30c1\u30a7\u30c3\u30af\u3059\u308b\u95a2\u6570\n * \n * @param string $dateStr \u691c\u8a3c\u3059\u308b\u65e5\u4ed8\u6587\u5b57\u5217\n * @param string $format \u671f\u5f85\u3059\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n * @return bool \u6709\u52b9\u306a\u65e5\u4ed8\u306e\u5834\u5408\u306ftrue\n *\/\nfunction isValidDate($dateStr, $format = 'Y-m-d') {\n    $dateTime = DateTime::createFromFormat($format, $dateStr);\n    \n    \/\/ \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u4e00\u81f4\u3059\u308b\u304b\u3068\u3001\u5b9f\u969b\u306e\u65e5\u4ed8\u3068\u3057\u3066\u6709\u52b9\u304b\u306e\u4e21\u65b9\u3092\u30c1\u30a7\u30c3\u30af\n    return $dateTime &amp;&amp; $dateTime-&gt;format($format) === $dateStr;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$testDates = [\n    '2023-12-31', \/\/ \u6709\u52b9\n    '2023-02-29', \/\/ \u7121\u52b9\uff082023\u5e74\u306f\u958f\u5e74\u3067\u306f\u306a\u3044\uff09\n    '2023-13-01', \/\/ \u7121\u52b9\uff08\u6708\u304c\u7bc4\u56f2\u5916\uff09\n    '2023\/12\/31', \/\/ \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u4e0d\u4e00\u81f4\n];\n\nforeach ($testDates as $date) {\n    echo $date . \" \u306f \" . (isValidDate($date) ? \"\u6709\u52b9\" : \"\u7121\u52b9\") . \"\u3067\u3059\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">\u4f8b\u5916\u51e6\u7406\u3092\u6d3b\u7528\u3057\u305f\u65e5\u4ed8\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u65e5\u4ed8\u6587\u5b57\u5217\u3092DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\u3059\u308b\uff08\u7121\u52b9\u306a\u5834\u5408\u306fnull\u3092\u8fd4\u3059\uff09\n * \n * @param string $dateStr \u65e5\u4ed8\u6587\u5b57\u5217\n * @param string $format \u671f\u5f85\u3059\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n * @return DateTime|null \u6709\u52b9\u306a\u65e5\u4ed8\u306e\u5834\u5408\u306fDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3001\u305d\u308c\u4ee5\u5916\u306fnull\n *\/\nfunction safeCreateDateTime($dateStr, $format = 'Y-m-d') {\n    try {\n        $dateTime = new DateTime($dateStr);\n        return $dateTime;\n    } catch (Exception $e) {\n        \/\/ \u30a8\u30e9\u30fc\u30ed\u30b0\u306b\u8a18\u9332\u3057\u305f\u308a\u3059\u308b\u51e6\u7406\u3092\u3053\u3053\u306b\u8ffd\u52a0\n        return null;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$dateStr = '2023-02-29'; \/\/ \u7121\u52b9\u306a\u65e5\u4ed8\n$dateTime = safeCreateDateTime($dateStr);\nif ($dateTime) {\n    echo \"\u65e5\u4ed8\u306f\u6709\u52b9\u3067\u3059: \" . $dateTime-&gt;format('Y-m-d');\n} else {\n    echo \"\u7121\u52b9\u306a\u65e5\u4ed8\u3067\u3059: \" . $dateStr;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\uff08\u4ee3\u66ff\u5024\uff09\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u65e5\u4ed8\u6587\u5b57\u5217\u3092\u51e6\u7406\u3057\u3001\u7121\u52b9\u306a\u5834\u5408\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u4f7f\u7528\u3059\u308b\n * \n * @param string $dateStr \u65e5\u4ed8\u6587\u5b57\u5217\n * @param string $defaultDate \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u65e5\u4ed8\uff08\u7121\u52b9\u306a\u5834\u5408\uff09\n * @return DateTime \u6709\u52b9\u306aDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\n *\/\nfunction getDateWithFallback($dateStr, $defaultDate = 'now') {\n    try {\n        $dateTime = new DateTime($dateStr);\n        \n        \/\/ \u8ffd\u52a0\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\uff08\u4f8b\uff1a\u672a\u6765\u306e\u65e5\u4ed8\u306f\u7121\u52b9\u3068\u3059\u308b\uff09\n        if ($dateTime &gt; new DateTime()) {\n            throw new Exception('\u672a\u6765\u306e\u65e5\u4ed8\u306f\u7121\u52b9\u3067\u3059');\n        }\n        \n        return $dateTime;\n    } catch (Exception $e) {\n        return new DateTime($defaultDate);\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$userInput = '2099-12-31'; \/\/ \u672a\u6765\u306e\u65e5\u4ed8\n$date = getDateWithFallback($userInput, 'today');\necho \"\u4f7f\u7528\u3059\u308b\u65e5\u4ed8: \" . $date-&gt;format('Y-m-d');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">\u65e5\u4ed8\u51e6\u7406\u306e\u30ed\u30b0\u3068\u30c7\u30d0\u30c3\u30b0<\/h4>\n\n\n\n<p>\u8907\u96d1\u306a\u65e5\u4ed8\u51e6\u7406\u3092\u884c\u3046\u5834\u5408\u3001\u4e2d\u9593\u72b6\u614b\u3092\u30ed\u30b0\u306b\u8a18\u9332\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30d0\u30c3\u30b0\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u65e5\u4ed8\u51e6\u7406\u306e\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u3092\u8a18\u9332\u3059\u308b\u95a2\u6570\n * \n * @param string $stage \u51e6\u7406\u30b9\u30c6\u30fc\u30b8\u306e\u540d\u524d\n * @param mixed $dateValue \u65e5\u4ed8\u5024\uff08\u6587\u5b57\u5217\u3001DateTime\u306a\u3069\uff09\n * @param string $additionalInfo \u8ffd\u52a0\u60c5\u5831\n *\/\nfunction logDateDebug($stage, $dateValue, $additionalInfo = '') {\n    $logMessage = \"DATE_DEBUG - {$stage}: \";\n    \n    if ($dateValue instanceof DateTime) {\n        $logMessage .= $dateValue-&gt;format('Y-m-d H:i:s e');\n    } else {\n        $logMessage .= var_export($dateValue, true);\n    }\n    \n    if ($additionalInfo) {\n        $logMessage .= \" - {$additionalInfo}\";\n    }\n    \n    \/\/ \u958b\u767a\u74b0\u5883\u3067\u306fecho\u3067\u51fa\u529b\u3001\u672c\u756a\u74b0\u5883\u3067\u306f\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3080\u306a\u3069\n    echo $logMessage . \"\\n\";\n    \/\/ error_log($logMessage); \/\/ \u672c\u756a\u74b0\u5883\u7528\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$inputDate = '2023-12-31';\nlogDateDebug('\u5165\u529b\u5024', $inputDate);\n\ntry {\n    $dateTime = new DateTime($inputDate);\n    logDateDebug('\u30d1\u30fc\u30b9\u5f8c', $dateTime);\n    \n    $dateTime-&gt;modify('+1 day');\n    logDateDebug('1\u65e5\u5f8c', $dateTime);\n} catch (Exception $e) {\n    logDateDebug('\u30a8\u30e9\u30fc', $inputDate, $e-&gt;getMessage());\n}\n<\/pre>\n\n\n\n<p>\u65e5\u4ed8\u95a2\u9023\u306e\u30a8\u30e9\u30fc\u3092\u672a\u7136\u306b\u9632\u304e\u3001\u767a\u751f\u3057\u305f\u554f\u984c\u3092\u7d20\u65e9\u304f\u89e3\u6c7a\u3059\u308b\u306b\u306f\u3001\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u52b9\u679c\u7684\u3067\u3059\u3002\u7279\u306b\u3001\u672c\u756a\u74b0\u5883\u3067\u306f\u60f3\u5b9a\u5916\u306e\u65e5\u4ed8\u5165\u529b\u306b\u5bfe\u3057\u3066\u5805\u7262\u306b\u52d5\u4f5c\u3059\u308b\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5b9f\u88c5\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-27\">\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5b9f\u88c5\u6cd5<\/h2>\n\n\n\n<p>\u30b0\u30ed\u30fc\u30d0\u30eb\u306b\u5c55\u958b\u3059\u308bWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30b5\u30fc\u30d3\u30b9\u3067\u306f\u3001\u8907\u6570\u306e\u8a00\u8a9e\u3084\u5730\u57df\u306b\u5bfe\u5fdc\u3057\u305f\u65e5\u4ed8\u8868\u793a\u304c\u6c42\u3081\u3089\u308c\u307e\u3059\u3002PHP\u3067\u306f\u3001Intl\u30d1\u30c3\u30b1\u30fc\u30b8\u306eIntlDateFormatter\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u591a\u8a00\u8a9e\u30fb\u591a\u5730\u57df\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">IntlDateFormatter \u3092\u6d3b\u7528\u3057\u305f\u591a\u8a00\u8a9e\u5bfe\u5fdc\u306e\u5b9f\u8df5<\/h3>\n\n\n\n<p>IntlDateFormatter\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001PHP\u306bIntl\u62e1\u5f35\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305a\u306fIntlDateFormatter\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">IntlDateFormatter\u306e\u57fa\u672c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * IntlDateFormatter\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\n *\/\n\n\/\/ IntlDateFormatter\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n\/\/ \u30d1\u30e9\u30e1\u30fc\u30bf: \u30ed\u30b1\u30fc\u30eb, \u65e5\u4ed8\u30b9\u30bf\u30a4\u30eb, \u6642\u523b\u30b9\u30bf\u30a4\u30eb, \u30bf\u30a4\u30e0\u30be\u30fc\u30f3, \u30ab\u30ec\u30f3\u30c0\u30fc\u30bf\u30a4\u30d7, \u30d1\u30bf\u30fc\u30f3\n$formatter = new IntlDateFormatter(\n    'ja_JP',                              \/\/ \u30ed\u30b1\u30fc\u30eb\uff08\u65e5\u672c\u8a9e - \u65e5\u672c\uff09\n    IntlDateFormatter::FULL,              \/\/ \u65e5\u4ed8\u30b9\u30bf\u30a4\u30eb\uff08FULL, LONG, MEDIUM, SHORT, NONE\uff09\n    IntlDateFormatter::SHORT,             \/\/ \u6642\u523b\u30b9\u30bf\u30a4\u30eb\n    'Asia\/Tokyo',                         \/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\n    IntlDateFormatter::GREGORIAN,         \/\/ \u30ab\u30ec\u30f3\u30c0\u30fc\u30bf\u30a4\u30d7\n    null                                  \/\/ \u30d1\u30bf\u30fc\u30f3\uff08null\u306e\u5834\u5408\u306f\u30b9\u30bf\u30a4\u30eb\u306b\u5f93\u3046\uff09\n);\n\n\/\/ \u65e5\u4ed8\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\uff08UNIX\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u307e\u305f\u306fDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6e21\u3059\uff09\n$timestamp = strtotime('2023-12-31 14:30:00');\necho $formatter-&gt;format($timestamp) . \"\\n\";\n\/\/ \u51fa\u529b\u4f8b: 2023\u5e7412\u670831\u65e5 14:30\n\n\/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\n$dateTime = new DateTime('2023-12-31 14:30:00', new DateTimeZone('Asia\/Tokyo'));\necho $formatter-&gt;format($dateTime) . \"\\n\";\n\/\/ \u51fa\u529b\u4f8b: 2023\u5e7412\u670831\u65e5 14:30\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">\u65e5\u4ed8\/\u6642\u523b\u306e\u30b9\u30bf\u30a4\u30eb\u5b9a\u6570<\/h4>\n\n\n\n<p>IntlDateFormatter\u306b\u306f\u3001\u65e5\u4ed8\u3068\u6642\u523b\u306e\u8868\u793a\u30b9\u30bf\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b\u305f\u3081\u306e\u5b9a\u6570\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n<div id=\"id-32face6e-7049-425d-a3a0-a7088df1a862\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5b9a\u6570<\/th><th>\u8aac\u660e<\/th><th>\u65e5\u672c\u8a9e\u3067\u306e\u4f8b<\/th><th>\u82f1\u8a9e\u3067\u306e\u4f8b<\/th><\/tr><\/thead><tbody><tr><td>IntlDateFormatter::FULL<\/td><td>\u6700\u3082\u8a73\u7d30\u306a\u30b9\u30bf\u30a4\u30eb<\/td><td>2023\u5e7412\u670831\u65e5\u65e5\u66dc\u65e5<\/td><td>Sunday, December 31, 2023<\/td><\/tr><tr><td>IntlDateFormatter::LONG<\/td><td>\u9577\u3044\u30b9\u30bf\u30a4\u30eb<\/td><td>2023\u5e7412\u670831\u65e5<\/td><td>December 31, 2023<\/td><\/tr><tr><td>IntlDateFormatter::MEDIUM<\/td><td>\u4e2d\u7a0b\u5ea6\u306e\u30b9\u30bf\u30a4\u30eb<\/td><td>2023\/12\/31<\/td><td>Dec 31, 2023<\/td><\/tr><tr><td>IntlDateFormatter::SHORT<\/td><td>\u77ed\u3044\u30b9\u30bf\u30a4\u30eb<\/td><td>23\/12\/31<\/td><td>12\/31\/23<\/td><\/tr><tr><td>IntlDateFormatter::NONE<\/td><td>\u975e\u8868\u793a<\/td><td>\uff08\u8868\u793a\u306a\u3057\uff09<\/td><td>(not displayed)<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">\u8907\u6570\u306e\u8a00\u8a9e\u306b\u5bfe\u5fdc\u3057\u305f\u30b3\u30fc\u30c9\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u8907\u6570\u306e\u8a00\u8a9e\u306b\u5bfe\u5fdc\u3057\u305f\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n * \n * @param mixed $date \u65e5\u4ed8\uff08\u6587\u5b57\u5217\u3001\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3001DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n * @param string $locale \u30ed\u30b1\u30fc\u30eb\u6587\u5b57\u5217\n * @return string \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305f\u65e5\u4ed8\n *\/\nfunction formatDateForLocale($date, $locale) {\n    \/\/ \u65e5\u4ed8\u3092DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\n    if (!($date instanceof DateTime)) {\n        if (is_string($date) &amp;&amp; !is_numeric($date)) {\n            $dateTime = new DateTime($date);\n        } elseif (is_numeric($date)) {\n            $dateTime = (new DateTime())-&gt;setTimestamp($date);\n        } else {\n            $dateTime = new DateTime();\n        }\n    } else {\n        $dateTime = $date;\n    }\n    \n    \/\/ \u30ed\u30b1\u30fc\u30eb\u306b\u5fdc\u3058\u305f\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u30fc\u3092\u4f5c\u6210\n    $formatter = new IntlDateFormatter(\n        $locale,\n        IntlDateFormatter::LONG,\n        IntlDateFormatter::SHORT\n    );\n    \n    return $formatter-&gt;format($dateTime);\n}\n\n\/\/ \u69d8\u3005\u306a\u8a00\u8a9e\u3067\u306e\u65e5\u4ed8\u8868\u793a\u4f8b\n$date = new DateTime('2023-12-31 14:30:00');\n$locales = [\n    'ja_JP' =&gt; '\u65e5\u672c\u8a9e\uff08\u65e5\u672c\uff09',\n    'en_US' =&gt; '\u82f1\u8a9e\uff08\u30a2\u30e1\u30ea\u30ab\uff09',\n    'fr_FR' =&gt; '\u30d5\u30e9\u30f3\u30b9\u8a9e\uff08\u30d5\u30e9\u30f3\u30b9\uff09',\n    'de_DE' =&gt; '\u30c9\u30a4\u30c4\u8a9e\uff08\u30c9\u30a4\u30c4\uff09',\n    'zh_CN' =&gt; '\u4e2d\u56fd\u8a9e\uff08\u7c21\u4f53\u5b57\uff09',\n    'ko_KR' =&gt; '\u97d3\u56fd\u8a9e\uff08\u97d3\u56fd\uff09',\n    'es_ES' =&gt; '\u30b9\u30da\u30a4\u30f3\u8a9e\uff08\u30b9\u30da\u30a4\u30f3\uff09',\n    'it_IT' =&gt; '\u30a4\u30bf\u30ea\u30a2\u8a9e\uff08\u30a4\u30bf\u30ea\u30a2\uff09',\n    'ru_RU' =&gt; '\u30ed\u30b7\u30a2\u8a9e\uff08\u30ed\u30b7\u30a2\uff09'\n];\n\nforeach ($locales as $locale =&gt; $name) {\n    echo \"{$name}: \" . formatDateForLocale($date, $locale) . \"\\n\";\n}\n\n\/* \u51fa\u529b\u4f8b:\n\u65e5\u672c\u8a9e\uff08\u65e5\u672c\uff09: 2023\u5e7412\u670831\u65e5 14:30\n\u82f1\u8a9e\uff08\u30a2\u30e1\u30ea\u30ab\uff09: December 31, 2023 at 2:30 PM\n\u30d5\u30e9\u30f3\u30b9\u8a9e\uff08\u30d5\u30e9\u30f3\u30b9\uff09: 31 d\u00e9cembre 2023 \u00e0 14:30\n\u30c9\u30a4\u30c4\u8a9e\uff08\u30c9\u30a4\u30c4\uff09: 31. Dezember 2023 um 14:30\n\u4e2d\u56fd\u8a9e\uff08\u7c21\u4f53\u5b57\uff09: 2023\u5e7412\u670831\u65e5 \u4e0b\u53482:30\n\u97d3\u56fd\u8a9e\uff08\u97d3\u56fd\uff09: 2023\ub144 12\uc6d4 31\uc77c \uc624\ud6c4 2:30\n\u30b9\u30da\u30a4\u30f3\u8a9e\uff08\u30b9\u30da\u30a4\u30f3\uff09: 31 de diciembre de 2023, 14:30\n\u30a4\u30bf\u30ea\u30a2\u8a9e\uff08\u30a4\u30bf\u30ea\u30a2\uff09: 31 dicembre 2023 14:30\n\u30ed\u30b7\u30a2\u8a9e\uff08\u30ed\u30b7\u30a2\uff09: 31 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2023 \u0433. 14:30\n*\/\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-32\">\u30ed\u30b1\u30fc\u30eb\u306b\u5fdc\u3058\u305f\u65e5\u4ed8\u8868\u793a\u306e\u5207\u308a\u66ff\u3048\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u591a\u8a00\u8a9e\u30b5\u30a4\u30c8\u3067\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u8a00\u8a9e\u8a2d\u5b9a\u306b\u5fdc\u3058\u3066\u65e5\u4ed8\u8868\u793a\u3092\u5207\u308a\u66ff\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u305d\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">\u30e6\u30fc\u30b6\u30fc\u8a00\u8a9e\u8a2d\u5b9a\u306b\u57fa\u3065\u304f\u65e5\u4ed8\u8868\u793a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u30e6\u30fc\u30b6\u30fc\u8a00\u8a9e\u8a2d\u5b9a\u306b\u57fa\u3065\u3044\u3066\u65e5\u4ed8\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3059\u308b\n * \n * @param mixed $date \u65e5\u4ed8\n * @param string $userLocale \u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30b1\u30fc\u30eb\u8a2d\u5b9a\n * @param array $formats \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u8a2d\u5b9a\u914d\u5217\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09\n * @return string \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305f\u65e5\u4ed8\n *\/\nfunction formatDateByUserLocale($date, $userLocale, array $formats = []) {\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u8a2d\u5b9a\n    $defaultFormats = [\n        'date_style' =&gt; IntlDateFormatter::LONG,\n        'time_style' =&gt; IntlDateFormatter::SHORT,\n        'timezone' =&gt; null, \/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528\n        'pattern' =&gt; null\n    ];\n    \n    \/\/ \u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a\u3068\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3092\u30de\u30fc\u30b8\n    $formats = array_merge($defaultFormats, $formats);\n    \n    \/\/ \u30ed\u30b1\u30fc\u30eb\u306b\u57fa\u3065\u304f\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u30fc\u3092\u4f5c\u6210\n    $formatter = new IntlDateFormatter(\n        $userLocale,\n        $formats['date_style'],\n        $formats['time_style'],\n        $formats['timezone'],\n        IntlDateFormatter::GREGORIAN,\n        $formats['pattern']\n    );\n    \n    \/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\n    if (!($date instanceof DateTime)) {\n        if (is_string($date) &amp;&amp; !is_numeric($date)) {\n            $dateTime = new DateTime($date);\n        } elseif (is_numeric($date)) {\n            $dateTime = (new DateTime())-&gt;setTimestamp($date);\n        } else {\n            $dateTime = new DateTime();\n        }\n    } else {\n        $dateTime = $date;\n    }\n    \n    return $formatter-&gt;format($dateTime);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\uff08Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u5b9f\u88c5\u30a4\u30e1\u30fc\u30b8\uff09\n\n\/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30b1\u30fc\u30eb\u8a2d\u5b9a\uff08\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u3067\u306f\u30bb\u30c3\u30b7\u30e7\u30f3\u3084DB\u304b\u3089\u53d6\u5f97\uff09\n$userLocale = 'fr_FR'; \/\/ \u30d5\u30e9\u30f3\u30b9\u8a9e\u570f\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u4eee\u5b9a\n\n\/\/ \u8a18\u4e8b\u306e\u6295\u7a3f\u65e5\u6642\n$postDate = new DateTime('2023-12-25 09:15:00');\n\n\/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30b1\u30fc\u30eb\u306b\u5fdc\u3058\u305f\u65e5\u4ed8\u8868\u793a\necho \"\u8a18\u4e8b\u6295\u7a3f\u65e5: \" . formatDateByUserLocale($postDate, $userLocale);\n\/\/ \u51fa\u529b\u4f8b: \u8a18\u4e8b\u6295\u7a3f\u65e5: 25 d\u00e9cembre 2023 \u00e0 09:15\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u6307\u5b9a\u3059\u308b\u5834\u5408\necho \"\u30ab\u30b9\u30bf\u30e0\u5f62\u5f0f: \" . formatDateByUserLocale($postDate, $userLocale, [\n    'date_style' =&gt; IntlDateFormatter::FULL,\n    'time_style' =&gt; IntlDateFormatter::LONG\n]);\n\/\/ \u51fa\u529b\u4f8b: \u30ab\u30b9\u30bf\u30e0\u5f62\u5f0f: lundi 25 d\u00e9cembre 2023 \u00e0 09:15:00\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-34\">\u30ab\u30b9\u30bf\u30e0\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u305f\u67d4\u8edf\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/h4>\n\n\n\n<p>IntlDateFormatter\u3067\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u3066\u7d30\u304b\u304f\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u5236\u5fa1\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u30ab\u30b9\u30bf\u30e0\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u305f\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n * \n * @param mixed $date \u65e5\u4ed8\n * @param string $locale \u30ed\u30b1\u30fc\u30eb\n * @param string $pattern \u30ab\u30b9\u30bf\u30e0\u30d1\u30bf\u30fc\u30f3\n * @return string \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305f\u65e5\u4ed8\n *\/\nfunction formatDateWithPattern($date, $locale, $pattern) {\n    $formatter = new IntlDateFormatter(\n        $locale,\n        IntlDateFormatter::FULL,\n        IntlDateFormatter::FULL,\n        null,\n        IntlDateFormatter::GREGORIAN,\n        $pattern\n    );\n    \n    return $formatter-&gt;format($date instanceof DateTime ? $date : new DateTime($date));\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$date = new DateTime('2023-12-31');\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\n$patterns = [\n    'EEEE, d MMMM y' =&gt; '\u66dc\u65e5\u3001\u65e5 \u6708 \u5e74\uff08\u30d5\u30eb\uff09',\n    'y\u5e74MM\u6708dd\u65e5' =&gt; '\u5e74\u6708\u65e5\uff08\u65e5\u672c\u5f0f\uff09',\n    'QQQ y' =&gt; '\u56db\u534a\u671f \u5e74',\n    'MMMM d' =&gt; '\u6708 \u65e5\uff08\u6708\u306e\u540d\u524d\uff09',\n    \"y\u5e74'\u7b2c'w'\u9031'\" =&gt; '\u5e74\u3068\u9031\u756a\u53f7'\n];\n\nforeach ($patterns as $pattern =&gt; $description) {\n    echo \"{$description}: \" . formatDateWithPattern($date, 'ja_JP', $pattern) . \"\\n\";\n}\n\n\/* \u51fa\u529b\u4f8b:\n\u66dc\u65e5\u3001\u65e5 \u6708 \u5e74\uff08\u30d5\u30eb\uff09: \u65e5\u66dc\u65e5, 31 12\u6708 2023\n\u5e74\u6708\u65e5\uff08\u65e5\u672c\u5f0f\uff09: 2023\u5e7412\u670831\u65e5\n\u56db\u534a\u671f \u5e74: Q4 2023\n\u6708 \u65e5\uff08\u6708\u306e\u540d\u524d\uff09: 12\u6708 31\n\u5e74\u3068\u9031\u756a\u53f7: 2023\u5e74\u7b2c53\u9031\n*\/\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">\u8907\u6570\u8a00\u8a9e\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u30b7\u30b9\u30c6\u30e0\u5bfe\u5fdc<\/h4>\n\n\n\n<p>\u7570\u306a\u308b\u30ab\u30ec\u30f3\u30c0\u30fc\u30b7\u30b9\u30c6\u30e0\uff08\u30a4\u30b9\u30e9\u30e0\u66a6\u3001\u4ecf\u66a6\u306a\u3069\uff09\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u7570\u306a\u308b\u30ab\u30ec\u30f3\u30c0\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u65e5\u4ed8\u3092\u8868\u793a\n * \n * @param mixed $date \u30b0\u30ec\u30b4\u30ea\u30aa\u66a6\u306e\u65e5\u4ed8\n * @param string $locale \u30ed\u30b1\u30fc\u30eb\n * @param int $calendar \u30ab\u30ec\u30f3\u30c0\u30fc\u30bf\u30a4\u30d7\n * @return string \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305f\u65e5\u4ed8\n *\/\nfunction formatDateWithCalendar($date, $locale, $calendar) {\n    $formatter = new IntlDateFormatter(\n        $locale,\n        IntlDateFormatter::LONG,\n        IntlDateFormatter::NONE,\n        null,\n        $calendar\n    );\n    \n    return $formatter-&gt;format($date instanceof DateTime ? $date : new DateTime($date));\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$date = new DateTime('2023-12-31');\n\n\/\/ \u7570\u306a\u308b\u30ab\u30ec\u30f3\u30c0\u30fc\u30b7\u30b9\u30c6\u30e0\n$calendars = [\n    IntlDateFormatter::GREGORIAN =&gt; '\u30b0\u30ec\u30b4\u30ea\u30aa\u66a6',\n    IntlDateFormatter::TRADITIONAL =&gt; '\u4f1d\u7d71\u7684\u306a\u66a6\uff08\u30ed\u30b1\u30fc\u30eb\u306b\u57fa\u3065\u304f\uff09',\n    \/\/ \u4ee5\u4e0b\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u306f\u5229\u7528\u3067\u304d\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\n    \/\/IntlDateFormatter::JAPANESE =&gt; '\u548c\u66a6',\n    \/\/IntlDateFormatter::BUDDHIST =&gt; '\u4ecf\u66a6',\n    \/\/IntlDateFormatter::ISLAMIC =&gt; '\u30a4\u30b9\u30e9\u30e0\u66a6',\n    \/\/IntlDateFormatter::PERSIAN =&gt; '\u30da\u30eb\u30b7\u30a2\u66a6',\n    \/\/IntlDateFormatter::CHINESE =&gt; '\u4e2d\u56fd\u66a6',\n    \/\/IntlDateFormatter::INDIAN =&gt; '\u30a4\u30f3\u30c9\u56fd\u5b9a\u66a6'\n];\n\nforeach ($calendars as $calendar =&gt; $name) {\n    try {\n        echo \"{$name}: \" . formatDateWithCalendar($date, 'ja_JP', $calendar) . \"\\n\";\n    } catch (Exception $e) {\n        echo \"{$name}: \u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\\n\";\n    }\n}\n<\/pre>\n\n\n\n<p>\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u5b9f\u88c5\u3059\u308b\u969b\u306f\u3001IntlDateFormatter\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u591a\u69d8\u306a\u8a00\u8a9e\u30fb\u5730\u57df\u30fb\u6587\u5316\u306b\u5bfe\u5fdc\u3057\u305f\u65e5\u4ed8\u8868\u793a\u3092\u7c21\u5358\u306b\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30e6\u30fc\u30b6\u30fc\u306b\u5bfe\u3057\u3066\u3001\u305d\u308c\u305e\u308c\u306e\u5730\u57df\u7fd2\u6163\u306b\u5408\u3063\u305f\u89aa\u3057\u307f\u3084\u3059\u3044\u65e5\u4ed8\u8868\u793a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u65e5\u4ed8\u51e6\u7406\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-36\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u65e5\u4ed8\u51e6\u7406\u306e\u6700\u9069\u5316<\/h2>\n\n\n\n<p>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306eWeb\u30b5\u30a4\u30c8\u3067\u306f\u3001\u65e5\u4ed8\u51e6\u7406\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5168\u4f53\u306e\u30b7\u30b9\u30c6\u30e0\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5927\u304d\u306a\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u51e6\u7406\u3092\u9ad8\u901f\u5316\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af\u3068\u3001\u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406\u6642\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-37\">\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u51e6\u7406\u306e\u9ad8\u901f\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-38\">1. \u95a2\u6570\u9078\u629e\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>PHP\u306b\u306f\u3055\u307e\u3056\u307e\u306a\u65e5\u4ed8\u95a2\u6570\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u305d\u308c\u305e\u308c\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7279\u6027\u304c\u7570\u306a\u308a\u307e\u3059\u3002\u4e00\u822c\u7684\u306b\u3001\u4ee5\u4e0b\u306e\u9806\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u826f\u3044\u3068\u3055\u308c\u3066\u3044\u307e\u3059\uff08\u901f\u3044\u9806\uff09\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\u306e\u30b3\u30fc\u30c9\u4f8b\n$timestamp = time();\n$iterations = 10000;\n\n\/\/ 1. time() - \u6700\u3082\u9ad8\u901f\uff08\u305f\u3060\u3057\u73fe\u5728\u6642\u523b\u306eUNIX\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u306e\u307f\uff09\n$start = microtime(true);\nfor ($i = 0; $i &lt; $iterations; $i++) {\n    $time = time();\n}\n$timeFunc = microtime(true) - $start;\n\n\/\/ 2. date() - \u6bd4\u8f03\u7684\u9ad8\u901f\n$start = microtime(true);\nfor ($i = 0; $i &lt; $iterations; $i++) {\n    $formatted = date('Y-m-d H:i:s', $timestamp);\n}\n$dateFunc = microtime(true) - $start;\n\n\/\/ 3. DateTime - \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3060\u304c\u3084\u3084\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3042\u308a\n$start = microtime(true);\nfor ($i = 0; $i &lt; $iterations; $i++) {\n    $dateTime = new DateTime();\n    $formatted = $dateTime-&gt;format('Y-m-d H:i:s');\n}\n$dateTimeFunc = microtime(true) - $start;\n\n\/\/ 4. IntlDateFormatter - \u6700\u3082\u4f4e\u901f\u3060\u304c\u56fd\u969b\u5316\u5bfe\u5fdc\n$start = microtime(true);\nfor ($i = 0; $i &lt; $iterations; $i++) {\n    $formatter = new IntlDateFormatter(\n        'ja_JP',\n        IntlDateFormatter::LONG,\n        IntlDateFormatter::SHORT\n    );\n    $formatted = $formatter-&gt;format($timestamp);\n}\n$intlFunc = microtime(true) - $start;\n\n\/\/ \u7d50\u679c\u8868\u793a\necho \"time(): {$timeFunc}\u79d2\\n\";\necho \"date(): {$dateFunc}\u79d2\\n\";\necho \"DateTime: {$dateTimeFunc}\u79d2\\n\";\necho \"IntlDateFormatter: {$intlFunc}\u79d2\\n\";\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">2. \u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u3092\u6d3b\u7528\u3057\u305f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a<\/h4>\n\n\n\n<p>\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u51e6\u7406\u306f\u3001\u540c\u3058\u65e5\u4ed8\u3092\u7e70\u308a\u8fd4\u3057\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3059\u308b\u3053\u3068\u304c\u591a\u3044\u305f\u3081\u3001\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u304c\u52b9\u679c\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u6a5f\u80fd\u4ed8\u304d\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u30fc\n *\/\nclass CachedDateFormatter {\n    private static $cache = [];\n    \n    \/**\n     * \u65e5\u4ed8\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3057\u3001\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\n     * \n     * @param int $timestamp \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3059\u308b\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\n     * @param string $format \u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n     * @return string \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305f\u65e5\u4ed8\n     *\/\n    public static function format($timestamp, $format = 'Y-m-d H:i:s') {\n        \/\/ \u79d2\u5358\u4f4d\u3067\u4e38\u3081\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30d2\u30c3\u30c8\u7387\u3092\u4e0a\u3052\u308b\n        $timestamp = (int)$timestamp;\n        $cacheKey = $timestamp . '_' . $format;\n        \n        if (!isset(self::$cache[$cacheKey])) {\n            self::$cache[$cacheKey] = date($format, $timestamp);\n            \n            \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30a4\u30ba\u306e\u5236\u9650\uff08\u4efb\u610f\uff09\n            if (count(self::$cache) &gt; 1000) {\n                \/\/ \u6700\u3082\u53e4\u3044\u30a8\u30f3\u30c8\u30ea\u3092\u524a\u9664\n                array_shift(self::$cache);\n            }\n        }\n        \n        return self::$cache[$cacheKey];\n    }\n    \n    \/**\n     * \u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30af\u30ea\u30a2\u3059\u308b\n     *\/\n    public static function clearCache() {\n        self::$cache = [];\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\necho CachedDateFormatter::format(time(), 'Y-m-d');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">3. \u65e5\u4ed8\u8a08\u7b97\u306e\u52b9\u7387\u5316<\/h4>\n\n\n\n<p>\u65e5\u4ed8\u306e\u8a08\u7b97\uff08\u52a0\u7b97\u3001\u6e1b\u7b97\u306a\u3069\uff09\u306f\u3001\u7279\u306b\u5927\u91cf\u306b\u884c\u3046\u5834\u5408\u306b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5f71\u97ff\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u975e\u52b9\u7387\u306a\u4f8b\uff08DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6bce\u56de\u751f\u6210\uff09\nfunction addDaysInefficient($date, $days) {\n    for ($i = 0; $i &lt; $days; $i++) {\n        $date = new DateTime($date-&gt;format('Y-m-d'));\n        $date-&gt;modify('+1 day');\n    }\n    return $date;\n}\n\n\/\/ \u52b9\u7387\u7684\u306a\u4f8b\uff08\u65e2\u5b58\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u518d\u5229\u7528\uff09\nfunction addDaysEfficient($date, $days) {\n    $date = clone $date; \/\/ \u5143\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u5909\u66f4\u3057\u306a\u3044\u3088\u3046\u306b\u30af\u30ed\u30fc\u30f3\n    $date-&gt;modify(\"+{$days} days\"); \/\/ \u4e00\u5ea6\u306e\u64cd\u4f5c\u3067\u52a0\u7b97\n    return $date;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">4. \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u51e6\u7406\u3068\u8a08\u7b97\u51e6\u7406\u306e\u5206\u96e2<\/h4>\n\n\n\n<p>\u9ad8\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u6c42\u3081\u3089\u308c\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001\u65e5\u4ed8\u306e\u5185\u90e8\u8868\u73fe\uff08UNIX\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u306a\u3069\uff09\u3068\u8868\u793a\u7528\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u5206\u96e2\u3059\u308b\u3068\u52b9\u7387\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u306e\u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406\u306e\u4f8b\nfunction processDateEfficiently($rows) {\n    \/\/ \u8a08\u7b97\u51e6\u7406\u7528\u306e\u5185\u90e8\u8868\u73fe\uff08\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\uff09\u3092\u4f7f\u7528\n    $timestamps = [];\n    foreach ($rows as $row) {\n        $timestamps[] = strtotime($row['date']);\n    }\n    \n    \/\/ \u5fc5\u8981\u306a\u8a08\u7b97\u3092\u52b9\u7387\u7684\u306b\u5b9f\u884c\n    $filteredTimestamps = array_filter($timestamps, function($ts) {\n        return $ts &gt; strtotime('-30 days');\n    });\n    \n    \/\/ \u8868\u793a\u306e\u305f\u3081\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f\u6700\u5f8c\u306b\u4e00\u5ea6\u3060\u3051\u5b9f\u884c\n    $formattedDates = [];\n    foreach ($filteredTimestamps as $ts) {\n        $formattedDates[] = date('Y-m-d', $ts);\n    }\n    \n    return $formattedDates;\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-42\">\u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406\u6642\u306e\u65e5\u4ed8\u64cd\u4f5c\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-43\">1. \u30d0\u30c3\u30c1\u51e6\u7406\u3068\u5236\u9650<\/h4>\n\n\n\n<p>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u5834\u5408\u306f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6291\u3048\u308b\u305f\u3081\u306b\u30d0\u30c3\u30c1\u51e6\u7406\u3092\u884c\u3046\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u5927\u91cf\u30c7\u30fc\u30bf\u306e\u65e5\u4ed8\u51e6\u7406\u3092\u30d0\u30c3\u30c1\u3067\u52b9\u7387\u7684\u306b\u884c\u3046\n * \n * @param array $dataSource \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\uff08\u914d\u5217\u3084\u30a4\u30c6\u30ec\u30fc\u30bf\uff09\n * @param int $batchSize \u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\n * @return array \u51e6\u7406\u7d50\u679c\n *\/\nfunction processDatesInBatches($dataSource, $batchSize = 1000) {\n    $results = [];\n    $batch = [];\n    $count = 0;\n    \n    foreach ($dataSource as $item) {\n        $batch[] = $item;\n        $count++;\n        \n        \/\/ \u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u306b\u9054\u3057\u305f\u3089\u51e6\u7406\n        if ($count % $batchSize === 0) {\n            $results = array_merge($results, processBatch($batch));\n            $batch = []; \/\/ \u30e1\u30e2\u30ea\u89e3\u653e\n        }\n    }\n    \n    \/\/ \u6b8b\u308a\u306e\u30d0\u30c3\u30c1\u3092\u51e6\u7406\n    if (!empty($batch)) {\n        $results = array_merge($results, processBatch($batch));\n    }\n    \n    return $results;\n}\n\n\/\/ \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u4f8b\nfunction processBatch($batch) {\n    $results = [];\n    foreach ($batch as $item) {\n        \/\/ \u65e5\u4ed8\u51e6\u7406\n        $timestamp = strtotime($item['date']);\n        $item['formatted_date'] = date('Y-m-d', $timestamp);\n        $item['is_recent'] = $timestamp &gt; strtotime('-7 days');\n        $results[] = $item;\n    }\n    return $results;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-44\">2. \u65e5\u4ed8\u7bc4\u56f2\u306e\u52b9\u7387\u7684\u306a\u751f\u6210<\/h4>\n\n\n\n<p>\u7279\u5b9a\u306e\u671f\u9593\u5185\u306e\u3059\u3079\u3066\u306e\u65e5\u4ed8\u3092\u751f\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u53cd\u5fa9\u51e6\u7406\u3092\u52b9\u7387\u5316\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u958b\u59cb\u65e5\u304b\u3089\u7d42\u4e86\u65e5\u307e\u3067\u306e\u65e5\u4ed8\u914d\u5217\u3092\u751f\u6210\u3059\u308b\n * \n * @param string $startDate \u958b\u59cb\u65e5\uff08Y-m-d\u5f62\u5f0f\uff09\n * @param string $endDate \u7d42\u4e86\u65e5\uff08Y-m-d\u5f62\u5f0f\uff09\n * @return array \u65e5\u4ed8\u306e\u914d\u5217\n *\/\nfunction generateDateRange($startDate, $endDate) {\n    $startTimestamp = strtotime($startDate);\n    $endTimestamp = strtotime($endDate);\n    \n    \/\/ \u7121\u9650\u30eb\u30fc\u30d7\u9632\u6b62\n    if ($endTimestamp &lt; $startTimestamp) {\n        return [];\n    }\n    \n    $dates = [];\n    $currentTimestamp = $startTimestamp;\n    \n    \/\/ \u6bce\u56deDateTime \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\u3059\u308b\u3088\u308a\u52b9\u7387\u7684\n    while ($currentTimestamp &lt;= $endTimestamp) {\n        $dates[] = date('Y-m-d', $currentTimestamp);\n        $currentTimestamp = strtotime('+1 day', $currentTimestamp);\n    }\n    \n    return $dates;\n}\n\n\/\/ DatePeriod\u3092\u4f7f\u7528\u3057\u305f\u3088\u308a\u52b9\u7387\u7684\u306a\u65b9\u6cd5\uff08PHP 5.3\u4ee5\u964d\uff09\nfunction generateDateRangeEfficient($startDate, $endDate) {\n    $start = new DateTime($startDate);\n    $end = new DateTime($endDate);\n    $end-&gt;modify('+1 day'); \/\/ \u7d42\u4e86\u65e5\u3092\u542b\u3081\u308b\u305f\u3081\n    \n    $interval = new DateInterval('P1D'); \/\/ 1\u65e5\u9593\u9694\n    $dateRange = new DatePeriod($start, $interval, $end);\n    \n    $dates = [];\n    foreach ($dateRange as $date) {\n        $dates[] = $date-&gt;format('Y-m-d');\n    }\n    \n    return $dates;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-45\">3. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6d3b\u7528\u3057\u305f\u65e5\u4ed8\u51e6\u7406<\/h4>\n\n\n\n<p>\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u65e5\u4ed8\u51e6\u7406\u306f\u3001\u53ef\u80fd\u306a\u9650\u308aPHP\u3067\u306f\u306a\u304f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5074\u3067\u884c\u3046\u3053\u3068\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u975e\u52b9\u7387\u306a\u4f8b\nfunction filterDatesByPhp($records, $startDate, $endDate) {\n    $start = strtotime($startDate);\n    $end = strtotime($endDate);\n    \n    return array_filter($records, function($record) use ($start, $end) {\n        $timestamp = strtotime($record['date']);\n        return $timestamp &gt;= $start &amp;&amp; $timestamp &lt;= $end;\n    });\n}\n\n\/\/ SQL\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u52b9\u7387\u7684\u306a\u4f8b\nfunction filterDatesBySql($pdo, $startDate, $endDate) {\n    $sql = \"SELECT * FROM records WHERE date &gt;= :start AND date &lt;= :end\";\n    $stmt = $pdo-&gt;prepare($sql);\n    $stmt-&gt;execute([\n        ':start' =&gt; $startDate,\n        ':end' =&gt; $endDate\n    ]);\n    \n    return $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">4. \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>\u5927\u91cf\u306e\u65e5\u4ed8\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306b\u6ce8\u610f\u3057\u3001\u6700\u9069\u5316\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u305f\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u826f\u3044\u65e5\u4ed8\u7bc4\u56f2\u751f\u6210\nfunction dateRangeGenerator($startDate, $endDate) {\n    $startTimestamp = strtotime($startDate);\n    $endTimestamp = strtotime($endDate);\n    \n    if ($endTimestamp &lt; $startTimestamp) {\n        return;\n    }\n    \n    $currentTimestamp = $startTimestamp;\n    \n    while ($currentTimestamp &lt;= $endTimestamp) {\n        yield date('Y-m-d', $currentTimestamp);\n        $currentTimestamp = strtotime('+1 day', $currentTimestamp);\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$startDate = '2023-01-01';\n$endDate = '2023-12-31';\n\n\/\/ \u30e1\u30e2\u30ea\u52b9\u7387\u826f\u304f\u51e6\u7406\nforeach (dateRangeGenerator($startDate, $endDate) as $date) {\n    \/\/ \u5404\u65e5\u4ed8\u3092\u9806\u6b21\u51e6\u7406\uff08\u4e00\u5ea6\u306b\u5168\u3066\u306e\u65e5\u4ed8\u3092\u30e1\u30e2\u30ea\u306b\u4fdd\u6301\u3057\u306a\u3044\uff09\n    processDate($date);\n}\n<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u65e5\u4ed8\u51e6\u7406\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u898f\u6a21\u304c\u5927\u304d\u304f\u306a\u308b\u307b\u3069\u91cd\u8981\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u3001\u30c7\u30fc\u30bf\u5206\u6790\u3084\u7d71\u8a08\u51e6\u7406\u306a\u3069\u3001\u5927\u91cf\u306e\u65e5\u4ed8\u30c7\u30fc\u30bf\u3092\u6271\u3046\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u51e6\u7406\u901f\u5ea6\u306e\u5411\u4e0a\u3068\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u91cf\u306e\u524a\u6e1b\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001PHP 8.0\u4ee5\u964d\u3067\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u65b0\u6a5f\u80fd\u3068\u6539\u5584\u70b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-47\">PHP 8.0\u4ee5\u964d\u3067\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u65b0\u6a5f\u80fd\u3068\u6539\u5584\u70b9<\/h2>\n\n\n\n<p>PHP 8.0\u4ee5\u964d\u3001\u65e5\u4ed8\u30fb\u6642\u523b\u51e6\u7406\u306b\u95a2\u3057\u3066\u3044\u304f\u3064\u304b\u306e\u91cd\u8981\u306a\u6539\u5584\u3068\u65b0\u6a5f\u80fd\u304c\u5c0e\u5165\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306ePHP\u3067\u5229\u7528\u3067\u304d\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u6539\u5584\u70b9\u3068\u3001\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-48\">PHP 8\u306e\u65e5\u4ed8\u51e6\u7406\u306b\u304a\u3051\u308b\u5909\u66f4\u70b9\u3068\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-49\">1. DateTime\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5c0e\u5165<\/h4>\n\n\n\n<p>PHP 8.0\u3067\u306f\u3001<code>DateTimeInterface<\/code>\u304c\u3088\u308a\u5f37\u5316\u3055\u308c\u3001\u578b\u5ba3\u8a00\u306a\u3069\u3067\u306e\u4f7f\u3044\u3084\u3059\u3055\u304c\u5411\u4e0a\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * DateTimeInterface\u3092\u6d3b\u7528\u3057\u305f\u95a2\u6570\n * \n * @param DateTimeInterface $date \u65e5\u4ed8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\n * @return string \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6e08\u307f\u306e\u65e5\u4ed8\n *\/\nfunction formatDateTime(DateTimeInterface $date): string {\n    return $date-&gt;format('Y-m-d H:i:s');\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$dateTime = new DateTime('2023-12-31');\n$dateTimeImmutable = new DateTimeImmutable('2023-12-31');\n\n\/\/ \u3069\u3061\u3089\u3082\u53d7\u3051\u4ed8\u3051\u3089\u308c\u308b\necho formatDateTime($dateTime);\necho formatDateTime($dateTimeImmutable);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-50\">2. DateTime\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u306e\u53b3\u683c\u306a\u578b\u30c1\u30a7\u30c3\u30af<\/h4>\n\n\n\n<p>PHP 8\u3067\u306f\u578b\u30c1\u30a7\u30c3\u30af\u304c\u53b3\u683c\u306b\u306a\u308a\u3001\u7121\u52b9\u306a\u65e5\u4ed8\u6587\u5b57\u5217\u306b\u5bfe\u3059\u308b\u30a8\u30e9\u30fc\u304c\u3088\u308a\u660e\u78ba\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP 7.x \u3067\u306f\u8b66\u544a\u3092\u51fa\u3059\u3060\u3051\u306e\u5834\u5408\u304c\u3042\u3063\u305f\u304c\u3001PHP 8\u3067\u306f\u4f8b\u5916\u3092\u30b9\u30ed\u30fc\ntry {\n    $date = new DateTime('\u7121\u52b9\u306a\u65e5\u4ed8');\n} catch (Exception $e) {\n    echo \"PHP 8\u3067\u306f\u7121\u52b9\u306a\u65e5\u4ed8\u306b\u5bfe\u3057\u3066\u660e\u78ba\u306a\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3059: \" . $e-&gt;getMessage();\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">3. \u540d\u524d\u4ed8\u304d\u5f15\u6570\u306e\u30b5\u30dd\u30fc\u30c8<\/h4>\n\n\n\n<p>PHP 8.0\u3067\u5c0e\u5165\u3055\u308c\u305f\u540d\u524d\u4ed8\u304d\u5f15\u6570\u306f\u3001\u65e5\u4ed8\u95a2\u9023\u306e\u95a2\u6570\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3067\u304d\u308b\u305f\u3081\u3001\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP 8.0\u4ee5\u524d\u306e\u8a18\u8ff0\n$date = date_create_from_format('Y-m-d', '2023-12-31', new DateTimeZone('Asia\/Tokyo'));\n\n\/\/ PHP 8.0\u4ee5\u964d\u306e\u540d\u524d\u4ed8\u304d\u5f15\u6570\u3092\u4f7f\u7528\u3057\u305f\u8a18\u8ff0\n$date = date_create_from_format(\n    format: 'Y-m-d',\n    datetime: '2023-12-31',\n    timezone: new DateTimeZone('Asia\/Tokyo')\n);\n\n\/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3067\u3082\u540c\u69d8\u306b\u4f7f\u7528\u53ef\u80fd\n$dateTime = new DateTime(\n    datetime: '2023-12-31',\n    timezone: new DateTimeZone('Europe\/London')\n);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">4. DateTimeImmutable\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6539\u5584<\/h4>\n\n\n\n<p>PHP 8\u3067\u306f\u3001<code>DateTimeImmutable<\/code>\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5927\u5e45\u306b\u6539\u5584\u3055\u308c\u3001\u53ef\u5909\u306e<code>DateTime<\/code>\u3068\u306e\u5dee\u304c\u5c0f\u3055\u304f\u306a\u308a\u307e\u3057\u305f\u3002\u30a4\u30df\u30e5\u30fc\u30bf\u30d6\u30eb\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3059\u308b\u5229\u70b9\uff08\u4e88\u671f\u3057\u306a\u3044\u5909\u66f4\u3092\u9632\u3050\uff09\u3092\u3088\u308a\u6d3b\u304b\u3057\u3084\u3059\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP 8\u4ee5\u964d\u3067\u306fDateTimeImmutable\u3092\u7a4d\u6975\u7684\u306b\u4f7f\u7528\u3067\u304d\u308b\nfunction calculateAgeImmutable(DateTimeImmutable $birthDate): int {\n    $today = new DateTimeImmutable();\n    $diff = $today-&gt;diff($birthDate);\n    return $diff-&gt;y;\n}\n\n\/\/ \u8a95\u751f\u65e5\u304b\u3089\u5e74\u9f62\u3092\u8a08\u7b97\n$birthDate = new DateTimeImmutable('1990-01-15');\necho \"\u5e74\u9f62: \" . calculateAgeImmutable($birthDate);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">5. JIT\u30b3\u30f3\u30d1\u30a4\u30e9\u306b\u3088\u308b\u65e5\u4ed8\u51e6\u7406\u306e\u9ad8\u901f\u5316<\/h4>\n\n\n\n<p>PHP 8.0\u3067\u5c0e\u5165\u3055\u308c\u305fJIT\u30b3\u30f3\u30d1\u30a4\u30e9\u306f\u3001\u7e70\u308a\u8fd4\u3057\u5b9f\u884c\u3055\u308c\u308b\u65e5\u4ed8\u8a08\u7b97\u306a\u3069\u306e\u30b3\u30fc\u30c9\u3092\u6700\u9069\u5316\u3057\u3001\u5b9f\u884c\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ JIT\u304c\u52b9\u679c\u7684\u306a\u30eb\u30fc\u30d7\u51e6\u7406\uff08PHP 8\u4ee5\u964d\u3067\u9ad8\u901f\u5316\uff09\n$startTime = microtime(true);\n\n$dates = [];\nfor ($i = 0; $i &lt; 100000; $i++) {\n    $date = new DateTime();\n    $date-&gt;modify(\"+{$i} seconds\");\n    $dates[] = $date-&gt;format('Y-m-d H:i:s');\n}\n\n$endTime = microtime(true);\necho \"\u51e6\u7406\u6642\u9593: \" . ($endTime - $startTime) . \"\u79d2\";\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-54\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u4f7f\u3048\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8<\/h3>\n\n\n\n<p>PHP 8.0\u4ee5\u964d\u3067\u306f\u3001\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3084\u64cd\u4f5c\u3092\u7c21\u7565\u5316\u3059\u308b\u305f\u3081\u306e\u3044\u304f\u3064\u304b\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u30c6\u30af\u30cb\u30c3\u30af\u304c\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-55\">1. Constructor Property Promotion\u3092\u6d3b\u7528\u3057\u305f\u30b7\u30f3\u30d7\u30eb\u306a\u65e5\u4ed8\u30af\u30e9\u30b9<\/h4>\n\n\n\n<p>PHP 8.0\u3067\u5c0e\u5165\u3055\u308c\u305f\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30d7\u30ed\u30d1\u30c6\u30a3\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u65e5\u4ed8\u64cd\u4f5c\u3092\u884c\u3046\u30ab\u30b9\u30bf\u30e0\u30af\u30e9\u30b9\u3092\u3088\u308a\u7c21\u6f54\u306b\u8a18\u8ff0\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP 8.0\u4ee5\u964d\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30d7\u30ed\u30d1\u30c6\u30a3\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\nclass DateRange {\n    public function __construct(\n        public readonly DateTimeImmutable $startDate,\n        public readonly DateTimeImmutable $endDate\n    ) {\n        if ($this-&gt;startDate &gt; $this-&gt;endDate) {\n            throw new InvalidArgumentException('\u958b\u59cb\u65e5\u306f\u7d42\u4e86\u65e5\u3088\u308a\u524d\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093');\n        }\n    }\n    \n    \/\/ \u65e5\u6570\u3092\u8a08\u7b97\n    public function getDays(): int {\n        return (int)$this-&gt;startDate-&gt;diff($this-&gt;endDate)-&gt;format('%a') + 1;\n    }\n    \n    \/\/ \u671f\u9593\u5185\u304b\u30c1\u30a7\u30c3\u30af\n    public function includes(DateTimeInterface $date): bool {\n        return $date &gt;= $this-&gt;startDate &amp;&amp; $date &lt;= $this-&gt;endDate;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$range = new DateRange(\n    new DateTimeImmutable('2023-01-01'),\n    new DateTimeImmutable('2023-01-31')\n);\n\necho \"\u671f\u9593\u306e\u65e5\u6570: \" . $range-&gt;getDays() . \"\u65e5\\n\";\n$testDate = new DateTime('2023-01-15');\necho \"\u30c6\u30b9\u30c8\u65e5\u4ed8\u306f\u671f\u9593\u5185\u304b: \" . ($range-&gt;includes($testDate) ? \"\u306f\u3044\" : \"\u3044\u3044\u3048\");\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-56\">2. match\u5f0f\u306b\u3088\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u9078\u629e<\/h4>\n\n\n\n<p>PHP 8.0\u3067\u5c0e\u5165\u3055\u308c\u305f<code>match<\/code>\u5f0f\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u6761\u4ef6\u306b\u57fa\u3065\u3044\u3066\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u9078\u629e\u3059\u308b\u51e6\u7406\u304c\u7c21\u6f54\u306b\u66f8\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u8868\u793a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306b\u5fdc\u3058\u305f\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u8fd4\u3059\n * \n * @param string $context \u8868\u793a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\n * @return string \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30d1\u30bf\u30fc\u30f3\n *\/\nfunction getDateFormatByContext(string $context): string {\n    return match ($context) {\n        'database' =&gt; 'Y-m-d H:i:s',\n        'api' =&gt; 'c', \/\/ ISO 8601\n        'japanese' =&gt; 'Y\u5e74m\u6708d\u65e5',\n        'short' =&gt; 'y\/m\/d',\n        'friendly' =&gt; 'M j, Y',\n        default =&gt; 'Y-m-d',\n    };\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$date = new DateTime();\n$contexts = ['database', 'api', 'japanese', 'short', 'friendly'];\n\nforeach ($contexts as $context) {\n    $format = getDateFormatByContext($context);\n    echo \"{$context}: \" . $date-&gt;format($format) . \"\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-57\">3. Null\u5b89\u5168\u6f14\u7b97\u5b50\u3092\u4f7f\u3063\u305f\u65e5\u4ed8\u51e6\u7406<\/h4>\n\n\n\n<p>PHP 8.0\u3067\u5c0e\u5165\u3055\u308c\u305fNull\u5b89\u5168\u6f14\u7b97\u5b50\uff08<code>?-&gt;<\/code>\uff09\u306f\u3001Nullable\u306a\u65e5\u4ed8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6271\u3046\u969b\u306b\u4fbf\u5229\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u30e6\u30fc\u30b6\u30fc\u306e\u8a95\u751f\u65e5\u3092\u8868\u793a\uff08\u8a95\u751f\u65e5\u304c\u672a\u8a2d\u5b9a\u306e\u5834\u5408\u3082\u30a8\u30e9\u30fc\u306b\u306a\u3089\u306a\u3044\uff09\n * \n * @param User $user \u30e6\u30fc\u30b6\u30fc\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff08birthDate\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u6301\u3064\uff09\n * @return string \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305f\u8a95\u751f\u65e5\u307e\u305f\u306f\u300c\u672a\u8a2d\u5b9a\u300d\n *\/\nfunction displayBirthDate(User $user): string {\n    \/\/ Null\u5b89\u5168\u6f14\u7b97\u5b50\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001birthDate\u304cnull\u3067\u3082\u30a8\u30e9\u30fc\u306b\u306a\u3089\u306a\u3044\n    return $user-&gt;birthDate?-&gt;format('Y\u5e74m\u6708d\u65e5') ?? '\u672a\u8a2d\u5b9a';\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nclass User {\n    public function __construct(\n        public string $name,\n        public ?DateTimeImmutable $birthDate = null\n    ) {}\n}\n\n$user1 = new User('\u5c71\u7530\u592a\u90ce', new DateTimeImmutable('1990-05-15'));\n$user2 = new User('\u4f50\u85e4\u82b1\u5b50');\n\necho $user1-&gt;name . \"\u306e\u8a95\u751f\u65e5: \" . displayBirthDate($user1) . \"\\n\";\necho $user2-&gt;name . \"\u306e\u8a95\u751f\u65e5: \" . displayBirthDate($user2);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-58\">4. \u5c5e\u6027\uff08Attributes\uff09\u3092\u6d3b\u7528\u3057\u305f\u65e5\u4ed8\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<p>PHP 8.0\u3067\u5c0e\u5165\u3055\u308c\u305f\u5c5e\u6027\uff08Attributes\uff09\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u65e5\u4ed8\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u3092\u5ba3\u8a00\u7684\u306b\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u691c\u8a3c\u3059\u308b\u5c5e\u6027\n *\/\n#[Attribute]\nclass DateFormat {\n    public function __construct(public string $format = 'Y-m-d') {}\n    \n    public function validate(string $date): bool {\n        $dateTime = DateTime::createFromFormat($this-&gt;format, $date);\n        return $dateTime &amp;&amp; $dateTime-&gt;format($this-&gt;format) === $date;\n    }\n}\n\n\/\/ \u5c5e\u6027\u3092\u4f7f\u7528\u3057\u305f\u30af\u30e9\u30b9\nclass Event {\n    #[DateFormat('Y-m-d')]\n    public string $eventDate;\n    \n    #[DateFormat('H:i')]\n    public string $eventTime;\n    \n    public function __construct(string $date, string $time) {\n        $this-&gt;setEventDate($date);\n        $this-&gt;setEventTime($time);\n    }\n    \n    public function setEventDate(string $date): void {\n        \/\/ \u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3API\u3092\u4f7f\u3063\u3066\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u884c\u3046\n        $attribute = new DateFormat();\n        if (!$attribute-&gt;validate($date)) {\n            throw new InvalidArgumentException('\u7121\u52b9\u306a\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3059');\n        }\n        $this-&gt;eventDate = $date;\n    }\n    \n    public function setEventTime(string $time): void {\n        $attribute = new DateFormat('H:i');\n        if (!$attribute-&gt;validate($time)) {\n            throw new InvalidArgumentException('\u7121\u52b9\u306a\u6642\u523b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3059');\n        }\n        $this-&gt;eventTime = $time;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $event = new Event('2023-12-31', '14:30');\n    echo \"\u30a4\u30d9\u30f3\u30c8\u65e5\u6642: {$event-&gt;eventDate} {$event-&gt;eventTime}\";\n} catch (InvalidArgumentException $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage();\n}\n<\/pre>\n\n\n\n<p>PHP 8.0\u4ee5\u964d\u306e\u65b0\u6a5f\u80fd\u306f\u3001\u65e5\u4ed8\u51e6\u7406\u306e\u30b3\u30fc\u30c9\u3092\u3088\u308a\u7c21\u6f54\u306b\u3001\u5b89\u5168\u306b\u3001\u9ad8\u901f\u306b\u66f8\u304f\u305f\u3081\u306e\u591a\u304f\u306e\u53ef\u80fd\u6027\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u65b0\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u8aad\u307f\u3084\u3059\u3044\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u51e6\u7406\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u88c5\u4f8b\u3067\u5b66\u3076\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u5b9f\u8df5\u7684\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-59\">\u5b9f\u88c5\u4f8b\u3067\u5b66\u3076\uff1a\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u5b9f\u8df5\u7684\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/h2>\n\n\n\n<p>\u3053\u308c\u307e\u3067\u89e3\u8aac\u3057\u3066\u304d\u305f\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6280\u8853\u3092\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3069\u306e\u3088\u3046\u306b\u6d3b\u7528\u3059\u308b\u304b\u3001\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u4f8b\u3092\u901a\u3057\u3066\u5b66\u3073\u307e\u3057\u3087\u3046\u3002\u3053\u3053\u3067\u306f\u3001\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3068\u5206\u6790\u7528\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u3068\u3044\u30462\u3064\u306e\u7570\u306a\u308b\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3092\u53d6\u308a\u4e0a\u3052\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-60\">\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306b\u304a\u3051\u308b\u65e5\u6642\u8868\u793a\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u3068\u3063\u3066\u5206\u304b\u308a\u3084\u3059\u3044\u65e5\u6642\u8868\u793a\u3068\u3001\u30b7\u30b9\u30c6\u30e0\u5185\u90e8\u3067\u306e\u78ba\u5b9f\u306a\u65e5\u6642\u7ba1\u7406\u306e\u4e21\u7acb\u304c\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306f\u3001\u98f2\u98df\u5e97\u306e\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3092\u60f3\u5b9a\u3057\u305f\u5b9f\u88c5\u4f8b\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-61\">\u4e88\u7d04\u30af\u30e9\u30b9\u306e\u57fa\u672c\u69cb\u9020<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306e\u4e88\u7d04\u30af\u30e9\u30b9\n *\/\nclass Reservation {\n    private DateTimeImmutable $reservationDateTime;\n    private DateTimeZone $timezone;\n    private string $customerName;\n    private int $partySize;\n    private string $status;\n    \n    \/**\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n     * \n     * @param string $dateTime \u4e88\u7d04\u65e5\u6642\uff08\u4f8b: '2023-12-31 18:00:00'\uff09\n     * @param string $customerName \u9867\u5ba2\u540d\n     * @param int $partySize \u4eba\u6570\n     * @param string $timezoneId \u30bf\u30a4\u30e0\u30be\u30fc\u30f3ID\uff08\u30c7\u30d5\u30a9\u30eb\u30c8: 'Asia\/Tokyo'\uff09\n     *\/\n    public function __construct(\n        string $dateTime,\n        string $customerName,\n        int $partySize,\n        string $timezoneId = 'Asia\/Tokyo'\n    ) {\n        $this-&gt;timezone = new DateTimeZone($timezoneId);\n        $this-&gt;reservationDateTime = new DateTimeImmutable($dateTime, $this-&gt;timezone);\n        $this-&gt;customerName = $customerName;\n        $this-&gt;partySize = $partySize;\n        $this-&gt;status = 'confirmed'; \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306f\u78ba\u5b9a\u72b6\u614b\n    }\n    \n    \/**\n     * \u4e88\u7d04\u65e5\u6642\u3092\u53d6\u5f97\n     * \n     * @return DateTimeImmutable\n     *\/\n    public function getDateTime(): DateTimeImmutable {\n        return $this-&gt;reservationDateTime;\n    }\n    \n    \/**\n     * \u4e88\u7d04\u65e5\u306e\u307f\u3092\u53d6\u5f97\uff08\u6642\u523b\u306a\u3057\uff09\n     * \n     * @return string \u65e5\u4ed8\u306e\u307f\uff08Y-m-d\u5f62\u5f0f\uff09\n     *\/\n    public function getDate(): string {\n        return $this-&gt;reservationDateTime-&gt;format('Y-m-d');\n    }\n    \n    \/**\n     * \u4e88\u7d04\u6642\u523b\u306e\u307f\u3092\u53d6\u5f97\uff08\u65e5\u4ed8\u306a\u3057\uff09\n     * \n     * @return string \u6642\u523b\u306e\u307f\uff08H:i\u5f62\u5f0f\uff09\n     *\/\n    public function getTime(): string {\n        return $this-&gt;reservationDateTime-&gt;format('H:i');\n    }\n    \n    \/**\n     * \u9867\u5ba2\u5411\u3051\u8868\u793a\u7528\u306e\u65e5\u6642\u3092\u53d6\u5f97\n     * \n     * @param string $locale \u30ed\u30b1\u30fc\u30eb\uff08\u4f8b: 'ja_JP'\uff09\n     * @return string \u9867\u5ba2\u5411\u3051\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305f\u65e5\u6642\n     *\/\n    public function getFormattedDateTime(string $locale = 'ja_JP'): string {\n        $formatter = new IntlDateFormatter(\n            $locale,\n            IntlDateFormatter::LONG,\n            IntlDateFormatter::SHORT,\n            $this-&gt;timezone-&gt;getName()\n        );\n        \n        return $formatter-&gt;format($this-&gt;reservationDateTime);\n    }\n    \n    \/**\n     * \u4e88\u7d04\u304c\u6307\u5b9a\u3055\u308c\u305f\u65e5\u6570\u4ee5\u5185\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\n     * \n     * @param int $days \u65e5\u6570\n     * @return bool \u6307\u5b9a\u3055\u308c\u305f\u65e5\u6570\u4ee5\u5185\u306a\u3089true\n     *\/\n    public function isWithinDays(int $days): bool {\n        $now = new DateTimeImmutable('now', $this-&gt;timezone);\n        $diff = $this-&gt;reservationDateTime-&gt;diff($now);\n        \n        return $diff-&gt;days &lt;= $days &amp;&amp; $this-&gt;reservationDateTime &gt; $now;\n    }\n    \n    \/**\n     * \u4e88\u7d04\u60c5\u5831\u306e\u6587\u5b57\u5217\u8868\u73fe\u3092\u53d6\u5f97\n     * \n     * @return string \u4e88\u7d04\u60c5\u5831\n     *\/\n    public function __toString(): string {\n        return sprintf(\n            \"\u4e88\u7d04: %s\u69d8 %s\u540d - %s (%s)\",\n            $this-&gt;customerName,\n            $this-&gt;partySize,\n            $this-&gt;getFormattedDateTime(),\n            $this-&gt;status\n        );\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-62\">\u4e88\u7d04\u7ba1\u7406\u30af\u30e9\u30b9\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u4e88\u7d04\u7ba1\u7406\u30af\u30e9\u30b9\n *\/\nclass ReservationManager {\n    private array $reservations = [];\n    \n    \/**\n     * \u4e88\u7d04\u3092\u8ffd\u52a0\n     * \n     * @param Reservation $reservation \u8ffd\u52a0\u3059\u308b\u4e88\u7d04\n     *\/\n    public function addReservation(Reservation $reservation): void {\n        $this-&gt;reservations[] = $reservation;\n    }\n    \n    \/**\n     * \u6307\u5b9a\u65e5\u306e\u4e88\u7d04\u3092\u53d6\u5f97\n     * \n     * @param string $date \u65e5\u4ed8\uff08Y-m-d\u5f62\u5f0f\uff09\n     * @return array \u305d\u306e\u65e5\u306e\u4e88\u7d04\u306e\u914d\u5217\n     *\/\n    public function getReservationsByDate(string $date): array {\n        return array_filter($this-&gt;reservations, function(Reservation $reservation) use ($date) {\n            return $reservation-&gt;getDate() === $date;\n        });\n    }\n    \n    \/**\n     * \u6307\u5b9a\u65e5\u306e\u4e88\u7d04\u72b6\u6cc1\u3092HTML\u5f62\u5f0f\u3067\u51fa\u529b\n     * \n     * @param string $date \u65e5\u4ed8\uff08Y-m-d\u5f62\u5f0f\u307e\u305f\u306f'today'\uff09\n     * @return string HTML\u5f62\u5f0f\u306e\u4e88\u7d04\u72b6\u6cc1\n     *\/\n    public function generateDailyScheduleHtml(string $date = 'today'): string {\n        if ($date === 'today') {\n            $targetDate = (new DateTime())-&gt;format('Y-m-d');\n        } else {\n            $targetDate = $date;\n        }\n        \n        $dateObj = new DateTime($targetDate);\n        $formattedDate = $dateObj-&gt;format('Y\u5e74m\u6708d\u65e5');\n        $weekday = $this-&gt;getJapaneseWeekday($dateObj);\n        \n        $reservations = $this-&gt;getReservationsByDate($targetDate);\n        \n        \/\/ \u6642\u9593\u5e2f\u3054\u3068\u306b\u4e88\u7d04\u3092\u6574\u7406\n        $timeSlots = [];\n        foreach ($reservations as $reservation) {\n            $time = $reservation-&gt;getTime();\n            if (!isset($timeSlots[$time])) {\n                $timeSlots[$time] = [];\n            }\n            $timeSlots[$time][] = $reservation;\n        }\n        \n        \/\/ \u4e88\u7d04\u6642\u9593\u3067\u4e26\u3079\u66ff\u3048\n        ksort($timeSlots);\n        \n        \/\/ HTML\u751f\u6210\n        $html = \"&lt;h2&gt;{$formattedDate}\uff08{$weekday}\uff09\u306e\u4e88\u7d04\u72b6\u6cc1&lt;\/h2&gt;\\n\";\n        \n        if (empty($timeSlots)) {\n            $html .= \"&lt;p&gt;\u4e88\u7d04\u306f\u3042\u308a\u307e\u305b\u3093\u3002&lt;\/p&gt;\\n\";\n        } else {\n            $html .= \"&lt;table border='1'&gt;\\n\";\n            $html .= \"  &lt;tr&gt;&lt;th&gt;\u6642\u9593&lt;\/th&gt;&lt;th&gt;\u9867\u5ba2\u540d&lt;\/th&gt;&lt;th&gt;\u4eba\u6570&lt;\/th&gt;&lt;th&gt;\u30b9\u30c6\u30fc\u30bf\u30b9&lt;\/th&gt;&lt;\/tr&gt;\\n\";\n            \n            foreach ($timeSlots as $time =&gt; $reservationsAtTime) {\n                foreach ($reservationsAtTime as $index =&gt; $reservation) {\n                    $rowspan = $index === 0 ? count($reservationsAtTime) : 0;\n                    \n                    $html .= \"  &lt;tr&gt;\\n\";\n                    \n                    if ($rowspan &gt; 0) {\n                        $html .= \"    &lt;td rowspan='{$rowspan}'&gt;{$time}&lt;\/td&gt;\\n\";\n                    }\n                    \n                    $html .= \"    &lt;td&gt;{$reservation-&gt;customerName}&lt;\/td&gt;\\n\";\n                    $html .= \"    &lt;td&gt;{$reservation-&gt;partySize}\u540d&lt;\/td&gt;\\n\";\n                    $html .= \"    &lt;td&gt;{$reservation-&gt;status}&lt;\/td&gt;\\n\";\n                    $html .= \"  &lt;\/tr&gt;\\n\";\n                }\n            }\n            \n            $html .= \"&lt;\/table&gt;\\n\";\n        }\n        \n        return $html;\n    }\n    \n    \/**\n     * \u66dc\u65e5\u3092\u65e5\u672c\u8a9e\u306b\u5909\u63db\n     * \n     * @param DateTime $date \u65e5\u4ed8\n     * @return string \u65e5\u672c\u8a9e\u306e\u66dc\u65e5\n     *\/\n    private function getJapaneseWeekday(DateTime $date): string {\n        $weekdays = ['\u65e5', '\u6708', '\u706b', '\u6c34', '\u6728', '\u91d1', '\u571f'];\n        return $weekdays[(int)$date-&gt;format('w')];\n    }\n    \n    \/**\n     * \u76f4\u8fd1\u306e\u4e88\u7d04\u3092\u53d6\u5f97\n     * \n     * @param int $days \u4eca\u5f8c\u4f55\u65e5\u4ee5\u5185\u306e\u4e88\u7d04\u3092\u53d6\u5f97\u3059\u308b\u304b\n     * @return array \u76f4\u8fd1\u306e\u4e88\u7d04\u306e\u914d\u5217\n     *\/\n    public function getUpcomingReservations(int $days = 7): array {\n        return array_filter($this-&gt;reservations, function(Reservation $reservation) use ($days) {\n            return $reservation-&gt;isWithinDays($days);\n        });\n    }\n    \n    \/**\n     * \u4e88\u7d04\u78ba\u8a8d\u30e1\u30fc\u30eb\u7528\u306e\u65e5\u6642\u6587\u5b57\u5217\u3092\u751f\u6210\n     * \n     * @param Reservation $reservation \u4e88\u7d04\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\n     * @return string \u30e1\u30fc\u30eb\u7528\u306e\u65e5\u6642\u6587\u5b57\u5217\n     *\/\n    public function generateConfirmationDateString(Reservation $reservation): string {\n        $dateTime = $reservation-&gt;getDateTime();\n        \n        $year = $dateTime-&gt;format('Y');\n        $month = $dateTime-&gt;format('n');\n        $day = $dateTime-&gt;format('j');\n        $weekday = $this-&gt;getJapaneseWeekday(\n            (new DateTime())-&gt;setTimestamp($dateTime-&gt;getTimestamp())\n        );\n        $time = $dateTime-&gt;format('H:i');\n        \n        return \"{$year}\u5e74{$month}\u6708{$day}\u65e5\uff08{$weekday}\uff09 {$time}\";\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-63\">\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306e\u4f7f\u7528\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u4f7f\u7528\u4f8b\n$manager = new ReservationManager();\n\n\/\/ \u4e88\u7d04\u3092\u8ffd\u52a0\n$manager-&gt;addReservation(new Reservation(\n    '2023-12-31 18:00:00',\n    '\u5c71\u7530\u592a\u90ce',\n    4\n));\n\n$manager-&gt;addReservation(new Reservation(\n    '2023-12-31 18:30:00',\n    '\u4f50\u85e4\u82b1\u5b50',\n    2\n));\n\n$manager-&gt;addReservation(new Reservation(\n    '2023-12-31 19:00:00',\n    '\u9234\u6728\u4e00\u90ce',\n    6\n));\n\n\/\/ \u7279\u5b9a\u306e\u65e5\u306e\u4e88\u7d04\u72b6\u6cc1\u3092HTML\u5f62\u5f0f\u3067\u53d6\u5f97\n$scheduleHtml = $manager-&gt;generateDailyScheduleHtml('2023-12-31');\necho $scheduleHtml;\n\n\/\/ \u4e88\u7d04\u78ba\u8a8d\u30e1\u30fc\u30eb\u7528\u306e\u65e5\u6642\u6587\u5b57\u5217\u3092\u751f\u6210\n$reservation = new Reservation('2023-12-25 12:00:00', '\u7530\u4e2d\u8aa0', 3);\n$confirmationDate = $manager-&gt;generateConfirmationDateString($reservation);\necho \"\u3054\u4e88\u7d04\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002{$confirmationDate}\u306b\u304a\u5f85\u3061\u3057\u3066\u304a\u308a\u307e\u3059\u3002\";\n<\/pre>\n\n\n\n<p>\u3053\u306e\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\u4f8b\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u30dd\u30a4\u30f3\u30c8\u306b\u6ce8\u76ee\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>DateTimeImmutable<\/code> \u3092\u4f7f\u7528\u3057\u3066\u3001\u4e88\u7d04\u65e5\u6642\u306e\u4e0d\u5909\u6027\u3092\u4fdd\u8a3c<\/li>\n\n\n\n<li>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3057\u3066\u3001\u5730\u57df\u306b\u3088\u308b\u6642\u5dee\u306e\u554f\u984c\u3092\u56de\u907f<\/li>\n\n\n\n<li>\u9867\u5ba2\u5411\u3051\u306e\u8868\u793a\u3068\u30b7\u30b9\u30c6\u30e0\u5185\u90e8\u3067\u306e\u51e6\u7406\u3067\u7570\u306a\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u4f7f\u3044\u5206\u3051<\/li>\n\n\n\n<li><code>IntlDateFormatter<\/code> \u3092\u4f7f\u7528\u3057\u3066\u3001\u591a\u8a00\u8a9e\u5bfe\u5fdc\u3092\u5bb9\u6613\u306b\u3057\u3066\u3044\u308b<\/li>\n\n\n\n<li>\u65e5\u4ed8\u306e\u6bd4\u8f03\u3084\u5dee\u5206\u8a08\u7b97\u3092\u6d3b\u7528\u3057\u305f\u4e88\u7d04\u7ba1\u7406\u6a5f\u80fd\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-64\">\u30ed\u30b0\u51fa\u529b\u3084\u30c7\u30fc\u30bf\u5206\u6790\u3067\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6d3b\u7528\u8853<\/h3>\n\n\n\n<p>\u30ed\u30b0\u51fa\u529b\u3084\u30c7\u30fc\u30bf\u5206\u6790\u3067\u306f\u3001\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u4e00\u8cab\u6027\u3068\u7cbe\u5ea6\u304c\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306f\u3001\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u89e3\u6790\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\u4f8b\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-65\">\u30ed\u30b0\u30a8\u30f3\u30c8\u30ea\u30af\u30e9\u30b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u30ed\u30b0\u30a8\u30f3\u30c8\u30ea\u30af\u30e9\u30b9\n *\/\nclass LogEntry {\n    private DateTimeImmutable $timestamp;\n    private string $ipAddress;\n    private string $endpoint;\n    private int $responseCode;\n    private float $responseTime;\n    \n    \/**\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n     * \n     * @param string $timestamp \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u6587\u5b57\u5217\n     * @param string $ipAddress IP\u30a2\u30c9\u30ec\u30b9\n     * @param string $endpoint \u30a2\u30af\u30bb\u30b9\u3055\u308c\u305f\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\n     * @param int $responseCode HTTP\u30ec\u30b9\u30dd\u30f3\u30b9\u30b3\u30fc\u30c9\n     * @param float $responseTime \u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\uff08\u79d2\uff09\n     *\/\n    public function __construct(\n        string $timestamp,\n        string $ipAddress,\n        string $endpoint,\n        int $responseCode,\n        float $responseTime\n    ) {\n        $this-&gt;timestamp = new DateTimeImmutable($timestamp);\n        $this-&gt;ipAddress = $ipAddress;\n        $this-&gt;endpoint = $endpoint;\n        $this-&gt;responseCode = $responseCode;\n        $this-&gt;responseTime = $responseTime;\n    }\n    \n    \/**\n     * \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u53d6\u5f97\n     * \n     * @return DateTimeImmutable\n     *\/\n    public function getTimestamp(): DateTimeImmutable {\n        return $this-&gt;timestamp;\n    }\n    \n    \/**\n     * \u65e5\u4ed8\u3092\u53d6\u5f97\uff08YYYY-MM-DD\u5f62\u5f0f\uff09\n     * \n     * @return string\n     *\/\n    public function getDate(): string {\n        return $this-&gt;timestamp-&gt;format('Y-m-d');\n    }\n    \n    \/**\n     * \u6642\u523b\u3092\u53d6\u5f97\uff08HH:MM:SS\u5f62\u5f0f\uff09\n     * \n     * @return string\n     *\/\n    public function getTime(): string {\n        return $this-&gt;timestamp-&gt;format('H:i:s');\n    }\n    \n    \/**\n     * \u6642\u9593\u5e2f\uff08\u6642\u9593\u5358\u4f4d\uff09\u3092\u53d6\u5f97\n     * \n     * @return int 0-23\u306e\u6642\u9593\n     *\/\n    public function getHour(): int {\n        return (int)$this-&gt;timestamp-&gt;format('G');\n    }\n    \n    \/**\n     * \u66dc\u65e5\u3092\u53d6\u5f97\uff080=\u65e5\u66dc, 6=\u571f\u66dc\uff09\n     * \n     * @return int\n     *\/\n    public function getDayOfWeek(): int {\n        return (int)$this-&gt;timestamp-&gt;format('w');\n    }\n    \n    \/**\n     * \u30a8\u30e9\u30fc\u30ec\u30b9\u30dd\u30f3\u30b9\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\n     * \n     * @return bool\n     *\/\n    public function isError(): bool {\n        return $this-&gt;responseCode &gt;= 400;\n    }\n    \n    \/**\n     * \u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\uff08\u79d2\uff09\u3092\u53d6\u5f97\n     * \n     * @return float\n     *\/\n    public function getResponseTime(): float {\n        return $this-&gt;responseTime;\n    }\n    \n    \/**\n     * \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u53d6\u5f97\n     * \n     * @return string\n     *\/\n    public function getEndpoint(): string {\n        return $this-&gt;endpoint;\n    }\n    \n    \/**\n     * IP\u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\n     * \n     * @return string\n     *\/\n    public function getIpAddress(): string {\n        return $this-&gt;ipAddress;\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-66\">\u30ed\u30b0\u5206\u6790\u30af\u30e9\u30b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u30ed\u30b0\u5206\u6790\u30af\u30e9\u30b9\n *\/\nclass LogAnalyzer {\n    private array $logEntries = [];\n    \n    \/**\n     * \u30ed\u30b0\u30a8\u30f3\u30c8\u30ea\u3092\u8ffd\u52a0\n     * \n     * @param LogEntry $entry \u30ed\u30b0\u30a8\u30f3\u30c8\u30ea\n     *\/\n    public function addLogEntry(LogEntry $entry): void {\n        $this-&gt;logEntries[] = $entry;\n    }\n    \n    \/**\n     * \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30ed\u30b0\u30a8\u30f3\u30c8\u30ea\u3092\u8aad\u307f\u8fbc\u3080\n     * \n     * @param string $logFile \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\n     *\/\n    public function loadFromFile(string $logFile): void {\n        $handle = fopen($logFile, 'r');\n        \n        if ($handle) {\n            while (($line = fgets($handle)) !== false) {\n                \/\/ \u30ed\u30b0\u884c\u3092\u30d1\u30fc\u30b9\u3057\u3066 LogEntry \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\n                \/\/ \u4f8b: 2023-12-31 23:59:59 192.168.1.1 \/api\/users 200 0.123\n                $parts = explode(' ', trim($line));\n                \n                if (count($parts) &gt;= 6) {\n                    $timestamp = $parts[0] . ' ' . $parts[1];\n                    $ipAddress = $parts[2];\n                    $endpoint = $parts[3];\n                    $responseCode = (int)$parts[4];\n                    $responseTime = (float)$parts[5];\n                    \n                    $this-&gt;addLogEntry(new LogEntry(\n                        $timestamp,\n                        $ipAddress,\n                        $endpoint,\n                        $responseCode,\n                        $responseTime\n                    ));\n                }\n            }\n            \n            fclose($handle);\n        }\n    }\n    \n    \/**\n     * \u65e5\u5225\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u96c6\u8a08\n     * \n     * @return array \u65e5\u4ed8=&gt;\u30a2\u30af\u30bb\u30b9\u6570\u306e\u9023\u60f3\u914d\u5217\n     *\/\n    public function getDailyAccessCounts(): array {\n        $counts = [];\n        \n        foreach ($this-&gt;logEntries as $entry) {\n            $date = $entry-&gt;getDate();\n            \n            if (!isset($counts[$date])) {\n                $counts[$date] = 0;\n            }\n            \n            $counts[$date]++;\n        }\n        \n        \/\/ \u65e5\u4ed8\u9806\u306b\u30bd\u30fc\u30c8\n        ksort($counts);\n        \n        return $counts;\n    }\n    \n    \/**\n     * \u6642\u9593\u5e2f\u5225\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u96c6\u8a08\n     * \n     * @return array \u6642\u9593=&gt;\u30a2\u30af\u30bb\u30b9\u6570\u306e\u9023\u60f3\u914d\u5217\n     *\/\n    public function getHourlyAccessCounts(): array {\n        $counts = array_fill(0, 24, 0);\n        \n        foreach ($this-&gt;logEntries as $entry) {\n            $hour = $entry-&gt;getHour();\n            $counts[$hour]++;\n        }\n        \n        return $counts;\n    }\n    \n    \/**\n     * \u66dc\u65e5\u5225\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u96c6\u8a08\n     * \n     * @param bool $useJapaneseWeekdays \u65e5\u672c\u8a9e\u306e\u66dc\u65e5\u540d\u3092\u4f7f\u7528\u3059\u308b\u304b\u3069\u3046\u304b\n     * @return array \u66dc\u65e5=&gt;\u30a2\u30af\u30bb\u30b9\u6570\u306e\u9023\u60f3\u914d\u5217\n     *\/\n    public function getWeekdayAccessCounts(bool $useJapaneseWeekdays = true): array {\n        $counts = array_fill(0, 7, 0);\n        \n        foreach ($this-&gt;logEntries as $entry) {\n            $dayOfWeek = $entry-&gt;getDayOfWeek();\n            $counts[$dayOfWeek]++;\n        }\n        \n        if ($useJapaneseWeekdays) {\n            $weekdays = ['\u65e5', '\u6708', '\u706b', '\u6c34', '\u6728', '\u91d1', '\u571f'];\n            $namedCounts = [];\n            \n            foreach ($counts as $day =&gt; $count) {\n                $namedCounts[$weekdays[$day]] = $count;\n            }\n            \n            return $namedCounts;\n        }\n        \n        return $counts;\n    }\n    \n    \/**\n     * \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u5225\u306e\u30a8\u30e9\u30fc\u7387\u3092\u8a08\u7b97\n     * \n     * @return array \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8=&gt;\u30a8\u30e9\u30fc\u7387\u306e\u9023\u60f3\u914d\u5217\n     *\/\n    public function getEndpointErrorRates(): array {\n        $totalCounts = [];\n        $errorCounts = [];\n        \n        foreach ($this-&gt;logEntries as $entry) {\n            $endpoint = $entry-&gt;getEndpoint();\n            \n            if (!isset($totalCounts[$endpoint])) {\n                $totalCounts[$endpoint] = 0;\n                $errorCounts[$endpoint] = 0;\n            }\n            \n            $totalCounts[$endpoint]++;\n            \n            if ($entry-&gt;isError()) {\n                $errorCounts[$endpoint]++;\n            }\n        }\n        \n        $errorRates = [];\n        foreach ($totalCounts as $endpoint =&gt; $total) {\n            $errorRates[$endpoint] = $total &gt; 0 \n                ? round(($errorCounts[$endpoint] \/ $total) * 100, 2)\n                : 0;\n        }\n        \n        \/\/ \u30a8\u30e9\u30fc\u7387\u306e\u9ad8\u3044\u9806\u306b\u30bd\u30fc\u30c8\n        arsort($errorRates);\n        \n        return $errorRates;\n    }\n    \n    \/**\n     * \u6307\u5b9a\u671f\u9593\u5185\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\u5e73\u5747\u3092\u8a08\u7b97\n     * \n     * @param string $startDate \u958b\u59cb\u65e5\uff08Y-m-d\u5f62\u5f0f\uff09\n     * @param string $endDate \u7d42\u4e86\u65e5\uff08Y-m-d\u5f62\u5f0f\uff09\n     * @return float \u5e73\u5747\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\uff08\u79d2\uff09\n     *\/\n    public function getAverageResponseTime(string $startDate, string $endDate): float {\n        $startDateTime = new DateTimeImmutable($startDate . ' 00:00:00');\n        $endDateTime = new DateTimeImmutable($endDate . ' 23:59:59');\n        \n        $totalTime = 0;\n        $count = 0;\n        \n        foreach ($this-&gt;logEntries as $entry) {\n            $timestamp = $entry-&gt;getTimestamp();\n            \n            if ($timestamp &gt;= $startDateTime &amp;&amp; $timestamp &lt;= $endDateTime) {\n                $totalTime += $entry-&gt;getResponseTime();\n                $count++;\n            }\n        }\n        \n        return $count &gt; 0 ? $totalTime \/ $count : 0;\n    }\n    \n    \/**\n     * \u5206\u6790\u30ec\u30dd\u30fc\u30c8\u3092CSV\u5f62\u5f0f\u3067\u51fa\u529b\n     * \n     * @param string $outputFile \u51fa\u529b\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\n     *\/\n    public function exportDailyReportToCsv(string $outputFile): void {\n        $dailyCounts = $this-&gt;getDailyAccessCounts();\n        \n        $handle = fopen($outputFile, 'w');\n        \n        if ($handle) {\n            \/\/ \u30d8\u30c3\u30c0\u30fc\u884c\n            fputcsv($handle, ['\u65e5\u4ed8', '\u30a2\u30af\u30bb\u30b9\u6570', '\u30a8\u30e9\u30fc\u6570', '\u30a8\u30e9\u30fc\u7387(%)', '\u5e73\u5747\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593(\u79d2)']);\n            \n            foreach ($dailyCounts as $date =&gt; $totalCount) {\n                $errorCount = 0;\n                $totalResponseTime = 0;\n                \n                \/\/ \u8a72\u5f53\u65e5\u306e\u30a8\u30f3\u30c8\u30ea\u3092\u96c6\u8a08\n                foreach ($this-&gt;logEntries as $entry) {\n                    if ($entry-&gt;getDate() === $date) {\n                        if ($entry-&gt;isError()) {\n                            $errorCount++;\n                        }\n                        $totalResponseTime += $entry-&gt;getResponseTime();\n                    }\n                }\n                \n                $errorRate = $totalCount &gt; 0 ? round(($errorCount \/ $totalCount) * 100, 2) : 0;\n                $avgResponseTime = $totalCount &gt; 0 ? round($totalResponseTime \/ $totalCount, 3) : 0;\n                \n                \/\/ \u30c7\u30fc\u30bf\u884c\n                fputcsv($handle, [\n                    $date,\n                    $totalCount,\n                    $errorCount,\n                    $errorRate,\n                    $avgResponseTime\n                ]);\n            }\n            \n            fclose($handle);\n        }\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-67\">\u30ed\u30b0\u5206\u6790\u306e\u4f7f\u7528\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u4f7f\u7528\u4f8b\n$analyzer = new LogAnalyzer();\n\n\/\/ \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8aad\u307f\u8fbc\u307f\n$analyzer-&gt;loadFromFile('access.log');\n\n\/\/ \u65e5\u5225\u30a2\u30af\u30bb\u30b9\u6570\u3092\u53d6\u5f97\n$dailyCounts = $analyzer-&gt;getDailyAccessCounts();\necho \"\u65e5\u5225\u30a2\u30af\u30bb\u30b9\u6570:\\n\";\nforeach ($dailyCounts as $date =&gt; $count) {\n    echo \"{$date}: {$count}\u4ef6\\n\";\n}\n\n\/\/ \u6642\u9593\u5e2f\u5225\u30a2\u30af\u30bb\u30b9\u6570\u3092\u53d6\u5f97\n$hourlyCounts = $analyzer-&gt;getHourlyAccessCounts();\necho \"\\n\u6642\u9593\u5e2f\u5225\u30a2\u30af\u30bb\u30b9\u6570:\\n\";\nforeach ($hourlyCounts as $hour =&gt; $count) {\n    echo \"{$hour}\u6642: {$count}\u4ef6\\n\";\n}\n\n\/\/ \u66dc\u65e5\u5225\u30a2\u30af\u30bb\u30b9\u6570\u3092\u53d6\u5f97\n$weekdayCounts = $analyzer-&gt;getWeekdayAccessCounts();\necho \"\\n\u66dc\u65e5\u5225\u30a2\u30af\u30bb\u30b9\u6570:\\n\";\nforeach ($weekdayCounts as $weekday =&gt; $count) {\n    echo \"{$weekday}\u66dc\u65e5: {$count}\u4ef6\\n\";\n}\n\n\/\/ \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u5225\u30a8\u30e9\u30fc\u7387\u3092\u53d6\u5f97\n$errorRates = $analyzer-&gt;getEndpointErrorRates();\necho \"\\n\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u5225\u30a8\u30e9\u30fc\u7387:\\n\";\nforeach ($errorRates as $endpoint =&gt; $rate) {\n    echo \"{$endpoint}: {$rate}%\\n\";\n}\n\n\/\/ \u671f\u9593\u5185\u306e\u5e73\u5747\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\u3092\u53d6\u5f97\n$avgTime = $analyzer-&gt;getAverageResponseTime('2023-12-01', '2023-12-31');\necho \"\\n2023\u5e7412\u6708\u306e\u5e73\u5747\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593: {$avgTime}\u79d2\\n\";\n\n\/\/ \u65e5\u5225\u30ec\u30dd\u30fc\u30c8\u3092CSV\u51fa\u529b\n$analyzer-&gt;exportDailyReportToCsv('daily_report.csv');\necho \"\\n\u65e5\u5225\u30ec\u30dd\u30fc\u30c8\u3092 daily_report.csv \u306b\u51fa\u529b\u3057\u307e\u3057\u305f\\n\";\n<\/pre>\n\n\n\n<p>\u3053\u306e\u30ed\u30b0\u5206\u6790\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\u4f8b\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u30dd\u30a4\u30f3\u30c8\u306b\u6ce8\u76ee\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ed\u30b0\u30c7\u30fc\u30bf\u3092\u65e5\u4ed8\u3067\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3001\u6642\u7cfb\u5217\u306e\u5206\u6790\u3092\u53ef\u80fd\u306b\u3059\u308b<\/li>\n\n\n\n<li>\u6642\u9593\u5e2f\u3084\u66dc\u65e5\u306a\u3069\u3001\u65e5\u4ed8\u306e\u7279\u5b9a\u306e\u90e8\u5206\u3092\u62bd\u51fa\u3057\u3066\u5206\u6790<\/li>\n\n\n\n<li>\u671f\u9593\u6307\u5b9a\u306e\u5206\u6790\u306e\u305f\u3081\u306b\u65e5\u4ed8\u7bc4\u56f2\u306e\u6bd4\u8f03\u3092\u6d3b\u7528<\/li>\n\n\n\n<li>\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u4e00\u8cab\u6027\u3092\u4fdd\u3061\u3001\u30c7\u30fc\u30bf\u5206\u6790\u306e\u4fe1\u983c\u6027\u3092\u78ba\u4fdd<\/li>\n\n\n\n<li>\u7d50\u679c\u3092\u9069\u5207\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u51fa\u529b\uff08CSV\u306a\u3069\uff09<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u6d3b\u7528\u3059\u308b\u969b\u306e\u53c2\u8003\u306b\u306a\u308a\u307e\u3059\u3002\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u62e1\u5f35\u3084\u8abf\u6574\u3092\u884c\u3044\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-68\">\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u95a2\u3059\u308b\u3088\u304f\u3042\u308b\u8cea\u554f\u3068\u56de\u7b54<\/h2>\n\n\n\n<p>PHP\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u95a2\u3057\u3066\u3001\u958b\u767a\u8005\u304b\u3089\u3088\u304f\u5bc4\u305b\u3089\u308c\u308b\u8cea\u554f\u3068\u305d\u306e\u56de\u7b54\u3092\u307e\u3068\u3081\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-69\">\u300c\u5348\u524d\/\u5348\u5f8c\u300d\u306e\u8868\u793a\u65b9\u6cd5\u306b\u3064\u3044\u3066<\/h3>\n\n\n\n<p>PHP\u3067\u300c\u5348\u524d\u300d\u300c\u5348\u5f8c\u300d\u3092\u8868\u793a\u3059\u308b\u65b9\u6cd5\u306f\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-70\">date()\u95a2\u6570\u3067\u306e\u300c\u5348\u524d\/\u5348\u5f8c\u300d\u8868\u793a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u82f1\u8a9e\u306e\u300cam\/pm\u300d\u3092\u8868\u793a\necho date('a'); \/\/ 'am' \u307e\u305f\u306f 'pm'\uff08\u5c0f\u6587\u5b57\uff09\necho date('A'); \/\/ 'AM' \u307e\u305f\u306f 'PM'\uff08\u5927\u6587\u5b57\uff09\n\n\/\/ \u65e5\u672c\u8a9e\u306e\u300c\u5348\u524d\/\u5348\u5f8c\u300d\u306b\u5909\u63db\nfunction formatJapaneseAmPm($time = 'now') {\n    if (is_string($time)) {\n        $dateTime = new DateTime($time);\n    } elseif ($time instanceof DateTime) {\n        $dateTime = $time;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    $hour = (int)$dateTime-&gt;format('G'); \/\/ 0-23\u306e\u6642\u9593\n    $ampm = $hour &lt; 12 ? '\u5348\u524d' : '\u5348\u5f8c';\n    \n    return $ampm;\n}\n\necho formatJapaneseAmPm('14:30:00'); \/\/ '\u5348\u5f8c'\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-71\">strftime()\u306b\u3088\u308b\u300c\u5348\u524d\/\u5348\u5f8c\u300d\u8868\u793a\uff08PHP 8.1\u4ee5\u524d\uff09<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP\u306e\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306fstrftime()\u3092\u4f7f\u7528\u3067\u304d\u307e\u3057\u305f\uff08PHP 8.1\u3067\u975e\u63a8\u5968\uff09\nsetlocale(LC_TIME, 'ja_JP.UTF-8');\necho strftime('%p', strtotime('14:30:00')); \/\/ \u74b0\u5883\u306b\u3088\u3063\u3066\u300c\u5348\u5f8c\u300d\u3068\u8868\u793a\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308b\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-72\">IntlDateFormatter\u306b\u3088\u308b\u300c\u5348\u524d\/\u5348\u5f8c\u300d\u8868\u793a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function getJapaneseTimeWithAmPm($time = 'now') {\n    $formatter = new IntlDateFormatter(\n        'ja_JP',\n        IntlDateFormatter::NONE, \/\/ \u65e5\u4ed8\u30b9\u30bf\u30a4\u30eb\u306a\u3057\n        IntlDateFormatter::SHORT, \/\/ \u77ed\u3044\u6642\u523b\u30b9\u30bf\u30a4\u30eb\n        null,\n        null,\n        'a h\u6642mm\u5206' \/\/ \u30ab\u30b9\u30bf\u30e0\u30d1\u30bf\u30fc\u30f3\n    );\n    \n    if (is_string($time) &amp;&amp; !is_numeric($time)) {\n        $dateTime = new DateTime($time);\n    } elseif (is_numeric($time)) {\n        $dateTime = (new DateTime())-&gt;setTimestamp($time);\n    } elseif ($time instanceof DateTime) {\n        $dateTime = $time;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    return $formatter-&gt;format($dateTime);\n}\n\necho getJapaneseTimeWithAmPm('14:30:00'); \/\/ '\u5348\u5f8c 2\u664230\u5206'\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-73\">\u30ab\u30b9\u30bf\u30e0\u914d\u5217\u306b\u3088\u308b\u300c\u5348\u524d\/\u5348\u5f8c\u300d\u8868\u793a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function formatTimeWithJapaneseAmPm($time = 'now') {\n    if (is_string($time) &amp;&amp; !is_numeric($time)) {\n        $dateTime = new DateTime($time);\n    } elseif (is_numeric($time)) {\n        $dateTime = (new DateTime())-&gt;setTimestamp($time);\n    } elseif ($time instanceof DateTime) {\n        $dateTime = $time;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    $hour24 = (int)$dateTime-&gt;format('G'); \/\/ 0-23\n    $hour12 = (int)$dateTime-&gt;format('g'); \/\/ 1-12\n    $minute = $dateTime-&gt;format('i');\n    $second = $dateTime-&gt;format('s');\n    \n    $ampm = $hour24 &lt; 12 ? '\u5348\u524d' : '\u5348\u5f8c';\n    \n    return \"{$ampm} {$hour12}\u6642{$minute}\u5206{$second}\u79d2\";\n}\n\necho formatTimeWithJapaneseAmPm('09:45:30'); \/\/ '\u5348\u524d 9\u664245\u520630\u79d2'\necho formatTimeWithJapaneseAmPm('21:45:30'); \/\/ '\u5348\u5f8c 9\u664245\u520630\u79d2'\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-74\">\u300c\u5348\u524d\/\u5348\u5f8c\u300d\u8868\u793a\u306b\u95a2\u3059\u308b\u3088\u304f\u3042\u308b\u7591\u554f<\/h4>\n\n\n\n<p><strong>Q: 00:00\uff08\u6df1\u591c0\u6642\uff09\u306f\u300c\u5348\u524d\u300d\uff1f\u300c\u5348\u5f8c\u300d\uff1f<\/strong><\/p>\n\n\n\n<p>A: \u65e5\u672c\u306e\u4e00\u822c\u7684\u306a\u6163\u7fd2\u3067\u306f\u3001\u300c00:00\u300d\u306f\u300c\u5348\u524d0\u6642\u300d\u3068\u3057\u3066\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u6df1\u591c0\u6642\necho formatTimeWithJapaneseAmPm('00:00:00'); \/\/ '\u5348\u524d 12\u664200\u520600\u79d2'\n<\/pre>\n\n\n\n<p><strong>Q: 12:00\uff08\u6b63\u5348\uff09\u306f\u300c\u5348\u524d\u300d\uff1f\u300c\u5348\u5f8c\u300d\uff1f<\/strong><\/p>\n\n\n\n<p>A: \u65e5\u672c\u306e\u4e00\u822c\u7684\u306a\u6163\u7fd2\u3067\u306f\u3001\u300c12:00\u300d\u306f\u300c\u5348\u5f8c0\u6642\u300d\u3067\u306f\u306a\u304f\u300c\u5348\u5f8c12\u6642\u300d\u3068\u3057\u3066\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u6b63\u5348\necho formatTimeWithJapaneseAmPm('12:00:00'); \/\/ '\u5348\u5f8c 12\u664200\u520600\u79d2'\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-75\">\u548c\u66a6\u3068\u897f\u66a6\u306e\u76f8\u4e92\u5909\u63db\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u65e5\u672c\u306e\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001\u548c\u66a6\uff08\u4ee4\u548c\u3001\u5e73\u6210\u306a\u3069\uff09\u3068\u897f\u66a6\u306e\u76f8\u4e92\u5909\u63db\u304c\u5fc5\u8981\u306b\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-76\">\u897f\u66a6\u304b\u3089\u548c\u66a6\u3078\u306e\u5909\u63db<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u897f\u66a6\u304b\u3089\u548c\u66a6\u306b\u5909\u63db\u3059\u308b\n * \n * @param string|int|DateTime $date \u65e5\u4ed8\n * @param bool $useGengo \u5143\u53f7\u3092\u4f7f\u7528\u3059\u308b\u304b\uff08false=R5\u5e74\u3001true=\u4ee4\u548c5\u5e74\uff09\n * @param bool $useGannen \u5143\u5e74\u3092\u300c\u5143\u5e74\u300d\u3068\u8868\u793a\u3059\u308b\u304b\uff08true=\u5143\u5e74\u3001false=1\u5e74\uff09\n * @return string \u548c\u66a6\n *\/\nfunction convertToJapaneseEra($date = 'now', bool $useGengo = true, bool $useGannen = true): string {\n    \/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\n    if (is_string($date) &amp;&amp; !is_numeric($date)) {\n        $dateTime = new DateTime($date);\n    } elseif (is_numeric($date)) {\n        $dateTime = (new DateTime())-&gt;setTimestamp($date);\n    } elseif ($date instanceof DateTime) {\n        $dateTime = $date;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    $year = (int)$dateTime-&gt;format('Y');\n    $month = (int)$dateTime-&gt;format('m');\n    $day = (int)$dateTime-&gt;format('d');\n    \n    \/\/ \u5143\u53f7\u306e\u5b9a\u7fa9\uff08\u958b\u59cb\u65e5\u4ed8\u3001\u5143\u53f7\u540d\u3001\u7565\u79f0\uff09\n    $eras = [\n        ['start' =&gt; '2019-05-01', 'name' =&gt; '\u4ee4\u548c', 'abbr' =&gt; 'R'],\n        ['start' =&gt; '1989-01-08', 'name' =&gt; '\u5e73\u6210', 'abbr' =&gt; 'H'],\n        ['start' =&gt; '1926-12-25', 'name' =&gt; '\u662d\u548c', 'abbr' =&gt; 'S'],\n        ['start' =&gt; '1912-07-30', 'name' =&gt; '\u5927\u6b63', 'abbr' =&gt; 'T'],\n        ['start' =&gt; '1868-01-25', 'name' =&gt; '\u660e\u6cbb', 'abbr' =&gt; 'M'],\n    ];\n    \n    \/\/ \u65e5\u4ed8\u3092\u6bd4\u8f03\u3057\u3066\u9069\u5207\u306a\u5143\u53f7\u3092\u6c7a\u5b9a\n    $targetDate = $dateTime-&gt;format('Y-m-d');\n    $eraName = '';\n    $eraAbbr = '';\n    $eraYear = 0;\n    \n    foreach ($eras as $era) {\n        if ($targetDate &gt;= $era['start']) {\n            $eraName = $era['name'];\n            $eraAbbr = $era['abbr'];\n            $eraStartDate = new DateTime($era['start']);\n            $eraYear = $year - $eraStartDate-&gt;format('Y') + 1;\n            break;\n        }\n    }\n    \n    \/\/ \u5143\u53f7\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u897f\u66a6\u3092\u8fd4\u3059\n    if (empty($eraName)) {\n        return \"{$year}\u5e74{$month}\u6708{$day}\u65e5\";\n    }\n    \n    \/\/ \u5143\u53f71\u5e74\u3092\u300c\u5143\u5e74\u300d\u3068\u8868\u8a18\u3059\u308b\u304b\u3069\u3046\u304b\n    $eraYearStr = ($eraYear === 1 &amp;&amp; $useGannen) ? '\u5143' : $eraYear;\n    \n    \/\/ \u5143\u53f7\u306e\u8868\u8a18\u65b9\u6cd5\uff08\u6f22\u5b57\u307e\u305f\u306f\u7565\u79f0\uff09\n    $eraDisplay = $useGengo ? $eraName : $eraAbbr;\n    \n    return \"{$eraDisplay}{$eraYearStr}\u5e74{$month}\u6708{$day}\u65e5\";\n}\n\n\/\/ \u4f7f\u7528\u4f8b\necho convertToJapaneseEra('2023-05-01'); \/\/ '\u4ee4\u548c5\u5e745\u67081\u65e5'\necho convertToJapaneseEra('2019-05-01', true, true); \/\/ '\u4ee4\u548c\u5143\u5e745\u67081\u65e5'\necho convertToJapaneseEra('2019-05-01', false, true); \/\/ 'R\u5143\u5e745\u67081\u65e5'\necho convertToJapaneseEra('1989-01-07'); \/\/ '\u662d\u548c64\u5e741\u67087\u65e5'\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-77\">\u548c\u66a6\u304b\u3089\u897f\u66a6\u3078\u306e\u5909\u63db<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u548c\u66a6\u304b\u3089\u897f\u66a6\u306b\u5909\u63db\u3059\u308b\n * \n * @param string $japaneseDate \u548c\u66a6\u65e5\u4ed8\uff08\u4f8b: '\u4ee4\u548c5\u5e745\u67081\u65e5', 'R5\u5e745\u67081\u65e5'\uff09\n * @return DateTime|null \u5909\u63db\u5f8c\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3001\u5909\u63db\u5931\u6557\u6642\u306fnull\n *\/\nfunction convertFromJapaneseEra(string $japaneseDate): ?DateTime {\n    \/\/ \u5143\u53f7\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u5b9a\u7fa9\n    $patterns = [\n        '\u4ee4\u548c|\u4ee4|R' =&gt; ['start' =&gt; '2019-05-01', 'end' =&gt; null],\n        '\u5e73\u6210|\u5e73|H' =&gt; ['start' =&gt; '1989-01-08', 'end' =&gt; '2019-04-30'],\n        '\u662d\u548c|\u662d|S' =&gt; ['start' =&gt; '1926-12-25', 'end' =&gt; '1989-01-07'],\n        '\u5927\u6b63|\u5927|T' =&gt; ['start' =&gt; '1912-07-30', 'end' =&gt; '1926-12-24'],\n        '\u660e\u6cbb|\u660e|M' =&gt; ['start' =&gt; '1868-01-25', 'end' =&gt; '1912-07-29'],\n    ];\n    \n    \/\/ \u548c\u66a6\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u30de\u30c3\u30c1\u3059\u308b\u304b\u78ba\u8a8d\n    $matched = false;\n    $year = 0;\n    $month = 0;\n    $day = 0;\n    $eraStart = '';\n    \n    foreach ($patterns as $eraPattern =&gt; $dates) {\n        \/\/ \u300c\u4ee4\u548c5\u5e745\u67081\u65e5\u300d\u3084\u300cR5\u5e745\u67081\u65e5\u300d\u306e\u3088\u3046\u306a\u30d1\u30bf\u30fc\u30f3\u306b\u30de\u30c3\u30c1\n        $pattern = \"\/({$eraPattern})([\u5143\\d]+|\u5143)\u5e74(\\d+)\u6708(\\d+)\u65e5\/u\";\n        if (preg_match($pattern, $japaneseDate, $matches)) {\n            $eraYear = $matches[2] === '\u5143' ? 1 : (int)$matches[2];\n            $month = (int)$matches[3];\n            $day = (int)$matches[4];\n            $eraStart = $dates['start'];\n            $matched = true;\n            break;\n        }\n    }\n    \n    if (!$matched) {\n        return null; \/\/ \u30de\u30c3\u30c1\u3057\u306a\u304b\u3063\u305f\u5834\u5408\n    }\n    \n    \/\/ \u5143\u53f7\u306e\u958b\u59cb\u5e74\u3092\u53d6\u5f97\n    $eraStartYear = (int)(new DateTime($eraStart))-&gt;format('Y');\n    \n    \/\/ \u897f\u66a6\u5e74\u3092\u8a08\u7b97\n    $year = $eraStartYear + $eraYear - 1;\n    \n    \/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\n    try {\n        return new DateTime(\"{$year}-{$month}-{$day}\");\n    } catch (Exception $e) {\n        return null; \/\/ \u7121\u52b9\u306a\u65e5\u4ed8\u306e\u5834\u5408\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$dateTime = convertFromJapaneseEra('\u4ee4\u548c5\u5e745\u67081\u65e5');\nif ($dateTime) {\n    echo $dateTime-&gt;format('Y-m-d'); \/\/ '2023-05-01'\n}\n\n$dateTime = convertFromJapaneseEra('R\u5143\u5e745\u67081\u65e5');\nif ($dateTime) {\n    echo $dateTime-&gt;format('Y-m-d'); \/\/ '2019-05-01'\n}\n\n$dateTime = convertFromJapaneseEra('\u662d\u548c64\u5e741\u67087\u65e5');\nif ($dateTime) {\n    echo $dateTime-&gt;format('Y-m-d'); \/\/ '1989-01-07'\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-78\">IntlDateFormatter\u3092\u4f7f\u7528\u3057\u305f\u548c\u66a6\u8868\u793a\uff08PHP 8.0\u4ee5\u964d\uff09<\/h4>\n\n\n\n<p>PHP 8.0\u4ee5\u964d\u3067\u306f\u3001IntlDateFormatter\u3092\u4f7f\u7528\u3057\u3066\u3088\u308a\u7c21\u5358\u306b\u548c\u66a6\u8868\u793a\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * IntlDateFormatter\u3092\u4f7f\u7528\u3057\u3066\u548c\u66a6\u8868\u793a\u3059\u308b\uff08PHP 8.0\u4ee5\u964d\uff09\n * \n * @param string|int|DateTime $date \u65e5\u4ed8\n * @return string \u548c\u66a6\n *\/\nfunction formatJapaneseCalendar($date = 'now'): string {\n    \/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u7d71\u4e00\n    if (is_string($date) &amp;&amp; !is_numeric($date)) {\n        $dateTime = new DateTime($date);\n    } elseif (is_numeric($date)) {\n        $dateTime = (new DateTime())-&gt;setTimestamp($date);\n    } elseif ($date instanceof DateTime) {\n        $dateTime = $date;\n    } else {\n        $dateTime = new DateTime();\n    }\n    \n    \/\/ IntlDateFormatter\u3092\u4f7f\u7528\n    $formatter = new IntlDateFormatter(\n        'ja_JP@calendar=japanese',\n        IntlDateFormatter::LONG,\n        IntlDateFormatter::NONE,\n        'Asia\/Tokyo',\n        IntlDateFormatter::TRADITIONAL\n    );\n    \n    return $formatter-&gt;format($dateTime);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\uff08PHP 8.0\u4ee5\u964d\uff09\necho formatJapaneseCalendar('2023-05-01'); \/\/ '\u4ee4\u548c5\u5e745\u67081\u65e5'\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-79\">\u548c\u66a6\u8868\u793a\u306b\u95a2\u3059\u308b\u3088\u304f\u3042\u308b\u7591\u554f<\/h4>\n\n\n\n<p><strong>Q: \u5143\u53f7\u304c\u5909\u308f\u308b\u77ac\u9593\uff08\u4f8b: \u5e73\u6210\u2192\u4ee4\u548c\uff09\u306e\u65e5\u4ed8\u306f\u3069\u3046\u6271\u3046\u3079\u304d\uff1f<\/strong><\/p>\n\n\n\n<p>A: \u5143\u53f7\u306e\u5207\u308a\u66ff\u3048\u65e5\uff082019\u5e745\u67081\u65e5\u306a\u3069\uff09\u306f\u3001\u65b0\u3057\u3044\u5143\u53f7\uff08\u4ee4\u548c\uff09\u3068\u3057\u3066\u6271\u3044\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u30b7\u30b9\u30c6\u30e0\u7684\u306b\u306f\u4e21\u65b9\u306e\u8868\u8a18\u304c\u53ef\u80fd\u306a\u3088\u3046\u306b\u8a2d\u8a08\u3059\u308b\u3068\u5b89\u5168\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>Q: \u660e\u6cbb\u4ee5\u524d\u306e\u65e5\u4ed8\u306f\u3069\u3046\u6271\u3046\u3079\u304d\uff1f<\/strong><\/p>\n\n\n\n<p>A: \u660e\u6cbb\u4ee5\u524d\uff081868\u5e741\u670825\u65e5\u3088\u308a\u524d\uff09\u306e\u65e5\u4ed8\u306f\u3001\u4e00\u822c\u7684\u306b\u548c\u66a6\u5909\u63db\u304c\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u897f\u66a6\u8868\u793a\u306e\u307e\u307e\u306b\u3059\u308b\u304b\u3001\u7279\u5225\u306a\u30ed\u30b8\u30c3\u30af\u3092\u8ffd\u52a0\u3057\u3066\u5bfe\u5fdc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$date = '1800-01-01';\n$japaneseDate = convertToJapaneseEra($date);\necho $japaneseDate; \/\/ '1800\u5e741\u67081\u65e5'\uff08\u548c\u66a6\u306b\u5909\u63db\u3055\u308c\u305a\u897f\u66a6\u306e\u307e\u307e\uff09\n<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5909\u63db\u95a2\u6570\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u30b7\u30b9\u30c6\u30e0\u3067\u6271\u3044\u3084\u3059\u3044\u897f\u66a6\u3068\u3001\u65e5\u672c\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u99b4\u67d3\u307f\u306e\u3042\u308b\u548c\u66a6\u3092\u9069\u5207\u306b\u5909\u63db\u30fb\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u3053\u308c\u3089\u306e\u95a2\u6570\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-80\">\u307e\u3068\u3081\uff1aPHP\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<p>PHP\u3067\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u3064\u3044\u3066\u3001\u57fa\u672c\u304b\u3089\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u307e\u3067\u5e45\u5e83\u304f\u89e3\u8aac\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u6700\u5f8c\u306b\u3001\u65e5\u4ed8\u51e6\u7406\u3092\u884c\u3046\u969b\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u307e\u3068\u3081\u3001\u3055\u3089\u306b\u52b9\u679c\u7684\u306aPHP\u65e5\u4ed8\u51e6\u7406\u306e\u8a2d\u8a08\u30dd\u30a4\u30f3\u30c8\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-81\">\u30b7\u30fc\u30f3\u5225\u304a\u3059\u3059\u3081\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u8a2d\u5b9a\u4e00\u89a7<\/h3>\n\n\n\n<p>\u76ee\u7684\u306b\u5fdc\u3058\u305f\u6700\u9069\u306a\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u8a2d\u5b9a\u3092\u4ee5\u4e0b\u306b\u307e\u3068\u3081\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u6d3b\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n<div id=\"id-dbf6b897-f6e2-4f6c-8a4c-a14ea92681b9\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7528\u9014<\/th><th>\u63a8\u5968\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/th><th>\u30b3\u30fc\u30c9\u4f8b<\/th><th>\u51fa\u529b\u4f8b<\/th><\/tr><\/thead><tbody><tr><td>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4fdd\u5b58\u7528<\/td><td><code>Y-m-d H:i:s<\/code><\/td><td><code>$date-&gt;format('Y-m-d H:i:s')<\/code><\/td><td>2023-12-31 23:59:59<\/td><\/tr><tr><td>JSON API\u7528<\/td><td><code>c<\/code>\uff08ISO 8601\uff09<\/td><td><code>$date-&gt;format('c')<\/code><\/td><td>2023-12-31T23:59:59+09:00<\/td><\/tr><tr><td>\u65e5\u672c\u8a9e\u8868\u793a\uff08\u30d5\u30a9\u30fc\u30de\u30eb\uff09<\/td><td><code>Y\u5e74m\u6708d\u65e5\uff08\u66dc\u65e5\uff09<\/code><\/td><td>\u203b\u30ab\u30b9\u30bf\u30e0\u95a2\u6570<\/td><td>2023\u5e7412\u670831\u65e5\uff08\u65e5\uff09<\/td><\/tr><tr><td>\u65e5\u672c\u8a9e\u8868\u793a\uff08\u7c21\u6613\uff09<\/td><td><code>Y\/m\/d<\/code><\/td><td><code>$date-&gt;format('Y\/m\/d')<\/code><\/td><td>2023\/12\/31<\/td><\/tr><tr><td>\u548c\u66a6\u8868\u793a<\/td><td>\u203b\u30ab\u30b9\u30bf\u30e0\u95a2\u6570<\/td><td><code>convertToJapaneseEra($date)<\/code><\/td><td>\u4ee4\u548c5\u5e7412\u670831\u65e5<\/td><\/tr><tr><td>\u7ba1\u7406\u753b\u9762\u4e00\u89a7\u8868\u793a<\/td><td><code>Y-m-d<\/code><\/td><td><code>$date-&gt;format('Y-m-d')<\/code><\/td><td>2023-12-31<\/td><\/tr><tr><td>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u51fa\u529b<\/td><td><code>Y-m-d H:i:s.u<\/code><\/td><td><code>$date-&gt;format('Y-m-d H:i:s.u')<\/code><\/td><td>2023-12-31 23:59:59.123456<\/td><\/tr><tr><td>\u30d5\u30a1\u30a4\u30eb\u540d\u7528<\/td><td><code>Ymd_His<\/code><\/td><td><code>$date-&gt;format('Ymd_His')<\/code><\/td><td>20231231_235959<\/td><\/tr><tr><td>\u4eba\u9593\u53ef\u8aad\uff08\u82f1\u8a9e\uff09<\/td><td><code>F j, Y g:i a<\/code><\/td><td><code>$date-&gt;format('F j, Y g:i a')<\/code><\/td><td>December 31, 2023 11:59 pm<\/td><\/tr><tr><td>\u56fd\u969b\u5bfe\u5fdc\uff08\u591a\u8a00\u8a9e\uff09<\/td><td>IntlDateFormatter<\/td><td>\u203bIntlDateFormatter\u4f7f\u7528<\/td><td>\u5404\u8a00\u8a9e\u306b\u5fdc\u3058\u305f\u8868\u793a<\/td><\/tr><tr><td>\u76f8\u5bfe\u65e5\u6642\u8868\u793a<\/td><td>\u203b\u30ab\u30b9\u30bf\u30e0\u95a2\u6570<\/td><td><code>getRelativeTimeString($date)<\/code><\/td><td>3\u5206\u524d\u30011\u6642\u9593\u524d\u3001\u6628\u65e5\u3001\u306a\u3069<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-82\">\u4eca\u5f8c\u306e\u958b\u767a\u306b\u6d3b\u304b\u305b\u308b\u65e5\u4ed8\u51e6\u7406\u306e\u8a2d\u8a08\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u65e5\u4ed8\u51e6\u7406\u306f\u4e00\u898b\u30b7\u30f3\u30d7\u30eb\u306b\u898b\u3048\u3066\u5b9f\u306f\u8907\u96d1\u306a\u8981\u7d20\u304c\u591a\u304f\u3001\u5c06\u6765\u7684\u306a\u62e1\u5f35\u6027\u3084\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3092\u8003\u616e\u3057\u305f\u8a2d\u8a08\u304c\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u610f\u8b58\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u3067\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3057\u3084\u3059\u3044\u65e5\u4ed8\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5185\u90e8\u8868\u73fe\u3068\u8868\u793a\u306e\u5206\u96e2<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3084\u30b7\u30b9\u30c6\u30e0\u5185\u90e8\u3067\u306f\u5e38\u306bUTC\uff08\u5354\u5b9a\u4e16\u754c\u6642\uff09\u3067\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58<\/li>\n\n\n\n<li>\u8868\u793a\u6642\u306b\u306e\u307f\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5909\u63db<\/li>\n\n\n\n<li>\u4f8b: <code>$utcTime = new DateTime('now', new DateTimeZone('UTC'))<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>DateTimeImmutable\u306e\u6d3b\u7528<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u4e88\u671f\u3057\u306a\u3044\u5909\u66f4\u3092\u9632\u3050\u305f\u3081\u3001\u53ef\u80fd\u306a\u9650\u308a<code>DateTimeImmutable<\/code>\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u7279\u306b\u8907\u6570\u306e\u7b87\u6240\u3067\u540c\u3058\u65e5\u4ed8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53c2\u7167\u3059\u308b\u5834\u5408\u306b\u6709\u52b9<\/li>\n\n\n\n<li>\u4f8b: <code>$date = new DateTimeImmutable('2023-12-31')<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u578b\u5ba3\u8a00\u306e\u6d3b\u7528<\/strong>\n<ul class=\"wp-block-list\">\n<li>PHP 7\u4ee5\u964d\u3067\u306f\u3001\u578b\u5ba3\u8a00\u3092\u4f7f\u3063\u3066\u65e5\u4ed8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5b89\u5168\u6027\u3092\u9ad8\u3081\u308b<\/li>\n\n\n\n<li>\u4f8b: <code>function processDate(DateTimeInterface $date): string { ... }<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4f8b\u5916\u51e6\u7406\u306e\u5fb9\u5e95<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u65e5\u4ed8\u30d1\u30fc\u30b9\u306f\u5931\u6557\u3059\u308b\u3053\u3068\u304c\u3042\u308b\u305f\u3081\u3001\u5fc5\u305a\u4f8b\u5916\u51e6\u7406\u3092\u884c\u3046<\/li>\n\n\n\n<li>\u4f8b: <code>try { $date = new DateTime($userInput);} catch (Exception $e) { \/\/ \u30a8\u30e9\u30fc\u51e6\u7406}<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u306e\u691c\u8a3c<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u5165\u529b\u3055\u308c\u305f\u65e5\u4ed8\u306f\u5fc5\u305a\u691c\u8a3c\u3057\u3001\u6b63\u898f\u5316\u3059\u308b<\/li>\n\n\n\n<li>\u4f8b: <code>DateTime::createFromFormat()<\/code>\u3067\u53b3\u5bc6\u306a\u691c\u8a3c\u3092\u884c\u3046<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u56fd\u969b\u5316\u5bfe\u5fdc\u3092\u6700\u521d\u304b\u3089\u8003\u616e<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3084\u8a00\u8a9e\u8a2d\u5b9a\u3092\u4fdd\u5b58<\/li>\n\n\n\n<li><code>IntlDateFormatter<\/code>\u3092\u6d3b\u7528\u3057\u305f\u591a\u8a00\u8a9e\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u4f8b: <code>$formatter = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::SHORT)<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u65e5\u4ed8\u64cd\u4f5c\u306e\u30ab\u30d7\u30bb\u30eb\u5316<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u65e5\u4ed8\u64cd\u4f5c\u3092\u884c\u3046\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9\u3084\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u6210<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u3067\u4e00\u8cab\u3057\u305f\u65e5\u4ed8\u51e6\u7406\u3092\u5b9f\u73fe<\/li>\n\n\n\n<li>\u4f8b: <code>DateUtils::formatForDisplay($date, $format)<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u65e5\u4ed8\u7bc4\u56f2\u306e\u6271\u3044<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u958b\u59cb\u65e5\u3068\u7d42\u4e86\u65e5\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u5c02\u7528\u306e\u30af\u30e9\u30b9\u3067\u30ab\u30d7\u30bb\u30eb\u5316<\/li>\n\n\n\n<li>\u7bc4\u56f2\u306e\u91cd\u8907\u30c1\u30a7\u30c3\u30af\u306a\u3069\u3001\u5171\u901a\u51e6\u7406\u3092\u30e1\u30bd\u30c3\u30c9\u5316<\/li>\n\n\n\n<li>\u4f8b: <code>class DateRange { public function overlaps(DateRange $other): bool { ... } }<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u51e6\u7406\u3067\u306f\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u6d3b\u7528<\/li>\n\n\n\n<li>\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0<\/li>\n\n\n\n<li>\u4f8b: <code>CachedDateFormatter::format($timestamp, $format)<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30c6\u30b9\u30c8\u53ef\u80fd\u306a\u8a2d\u8a08<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u73fe\u5728\u6642\u523b\u3078\u306e\u4f9d\u5b58\u3092DI\u30d1\u30bf\u30fc\u30f3\u3067\u5206\u96e2<\/li>\n\n\n\n<li>\u65e5\u4ed8\u306b\u4f9d\u5b58\u3059\u308b\u30ed\u30b8\u30c3\u30af\u306f\u30e2\u30c3\u30af\u53ef\u80fd\u306b\u3059\u308b<\/li>\n\n\n\n<li>\u4f8b: <code>function __construct(ClockInterface $clock) { $this-&gt;clock = $clock; }<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>PHP\u306e\u65e5\u4ed8\u51e6\u7406\u306f\u591a\u304f\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u9ad8\u54c1\u8cea\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u304c\u53ef\u80fd\u3067\u3059\u3002\u672c\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d44\u307f\u5408\u308f\u305b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u65e5\u4ed8\u51e6\u7406\u3092\u5b9f\u88c5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u95a2\u3059\u308b\u8cea\u554f\u3084\u7591\u554f\u304c\u3042\u308c\u3070\u3001\u305c\u3072\u30b3\u30e1\u30f3\u30c8\u6b04\u3067\u304a\u805e\u304b\u305b\u304f\u3060\u3055\u3044\u3002\u7686\u3055\u3093\u306e\u958b\u767a\u304c\u5c11\u3057\u3067\u3082\u5feb\u9069\u306b\u306a\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0a\u3001PHP\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u95a2\u3059\u308b\u5b8c\u5168\u30ac\u30a4\u30c9\u3092\u304a\u5c4a\u3051\u3057\u307e\u3057\u305f\u3002\u4eca\u5f8c\u3082\u6700\u65b0\u306ePHP\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u65e5\u4ed8\u51e6\u7406\u306e\u5909\u66f4\u70b9\u3084\u65b0\u6a5f\u80fd\u306b\u3064\u3044\u3066\u3001\u60c5\u5831\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u3066\u3044\u304f\u4e88\u5b9a\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP\u3067\u306e\u65e5\u4ed8\u51e6\u7406\u306f\u3001\u591a\u304f\u306e\u958b\u767a\u8005\u304c\u983b\u7e41\u306b\u76f4\u9762\u3059\u308b\u30bf\u30b9\u30af\u3067\u3042\u308a\u306a\u304c\u3089\u3001\u610f\u5916\u306a\u843d\u3068\u3057\u7a74\u304c\u6f5c\u3080\u9818\u57df\u3067\u3082\u3042\u308a\u307e\u3059\u3002\u7279\u306b\u65e5\u672c\u8a9e\u74b0\u5883\u3067\u306f\u5e74\u53f7\u8868\u793a\u3084\u66dc\u65e5\u306e\u65e5\u672c\u8a9e\u5316\u306a\u3069\u3001\u72ec\u81ea\u306e\u8981\u4ef6\u304c\u3042\u308a\u3001\u6b63\u78ba\u306a\u5b9f\u88c5\u306b\u306f\u7d30\u5fc3\u306e\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002 \u672c\u8a18\u4e8b\u3067 &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,63],"tags":[],"class_list":{"0":"post-3719","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"category-php-syntax","8":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3719"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3719\/revisions"}],"predecessor-version":[{"id":3720,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3719\/revisions\/3720"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}