{"id":3440,"date":"2025-03-24T08:46:11","date_gmt":"2025-03-23T23:46:11","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3440"},"modified":"2025-03-24T08:46:40","modified_gmt":"2025-03-23T23:46:40","slug":"%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91php%e3%81%aedatetime%e3%82%af%e3%83%a9%e3%82%b9%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac-9%e3%81%a4%e3%81%ae%e5%ae%9f%e8%b7%b5%e7%9a%84","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3440","title":{"rendered":"\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011PHP\u306eDateTime\u30af\u30e9\u30b9\u5fb9\u5e95\u89e3\u8aac &#8211; 9\u3064\u306e\u5b9f\u8df5\u7684\u30c6\u30af\u30cb\u30c3\u30af\u30685\u3064\u306e\u843d\u3068\u3057\u7a74"},"content":{"rendered":"\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\">\u5c0e\u5165\u90e8<\/a>  <\/li>  <li>    <a href=\"#i-1\">PHP\u306b\u304a\u3051\u308b\u65e5\u4ed8\u3068\u6642\u9593\u306e\u57fa\u672c\u6982\u5ff5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-2\">DateTime\u30af\u30e9\u30b9\u304c\u89e3\u6c7a\u3059\u308b\u5f93\u6765\u306e\u65e5\u4ed8\u95a2\u6570\u306e\u554f\u984c\u70b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">DateTime\u30af\u30e9\u30b9\u3068\u306f\uff1f\u305d\u306e\u7279\u5fb4\u3068\u5229\u70b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">DateTime\u30af\u30e9\u30b9\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4f5c\u6210\u65b9\u6cd5\u3068\u4e3b\u8981\u306a\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30aa\u30d7\u30b7\u30e7\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-8\">\u73fe\u5728\u306e\u65e5\u6642\u3092\u53d6\u5f97\u3059\u308b\u8907\u6570\u306e\u65b9\u6cd5\u3068\u305d\u306e\u9055\u3044<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u65e5\u4ed8\u3068\u6642\u9593\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u63db\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">format()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u305f\u30ab\u30b9\u30bf\u30e0\u51fa\u529b\u5f62\u5f0f\u306e\u4f5c\u6210<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u305f\u3081\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6226\u7565<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-18\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u51e6\u7406\u306e\u5b9f\u8df5\u7684\u30a2\u30d7\u30ed\u30fc\u30c1<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u8a2d\u5b9a\u3068\u5909\u63db\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-24\">\u56fd\u969b\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-30\">\u65e5\u4ed8\u306e\u8a08\u7b97\u3068\u64cd\u4f5c<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-31\">\u65e5\u4ed8\u306e\u52a0\u7b97\u3068\u6e1b\u7b97\u3092\u884c\u3046\u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-34\">DateInterval\u3092\u6d3b\u7528\u3057\u305f\u67d4\u8edf\u306a\u671f\u9593\u8a08\u7b97<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-38\">\u65e5\u4ed8\u6bd4\u8f03\u3068\u7bc4\u56f2\u30c1\u30a7\u30c3\u30af\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-43\">DateTimeImmutable\u3092\u4f7f\u3063\u305f\u5b89\u5168\u306a\u65e5\u4ed8\u64cd\u4f5c<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-44\">\u4e0d\u5909\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5229\u70b9\u3068DateTime\u3068\u306e\u9055\u3044<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-49\">\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3067\u7f6e\u304d\u63db\u3048\u308b\u3079\u304d\u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-56\">JSON\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-57\">DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u30fb\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-67\">\u5404\u7a2e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u4e92\u63db\u6027\u3092\u78ba\u4fdd\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-73\">DateTime\u30af\u30e9\u30b9\u4f7f\u7528\u6642\u306e5\u3064\u306e\u843d\u3068\u3057\u7a74\u3068\u5bfe\u7b56<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-74\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u95a2\u9023\u3059\u308b\u4e00\u822c\u7684\u306a\u30d0\u30b0\u3068\u89e3\u6c7a\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-77\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u3068\u306a\u308a\u3046\u308b\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li>        <a href=\"#i-79\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u3092\u907f\u3051\u308b\u305f\u3081\u306e\u5165\u529b\u691c\u8a3c\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-81\">PHP\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u4e92\u63db\u6027\u306e\u554f\u984c\u3068\u5bfe\u5fdc\u7b56<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-83\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5b9f\u88c5\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-84\">\u30ab\u30ec\u30f3\u30c0\u30fc\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u65e5\u4ed8\u51e6\u7406<\/a>      <\/li>      <li>        <a href=\"#i-87\">\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306b\u304a\u3051\u308b\u65e5\u6642\u51e6\u7406\u306e\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-90\">\u30ed\u30b0\u89e3\u6790\u3068\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-93\">\u307e\u3068\u3081\u3068\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-94\">DateTime\u6d3b\u7528\u306e\u305f\u3081\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8\u7dcf\u62ec<\/a>      <\/li>      <li>        <a href=\"#i-99\">\u3088\u308a\u9ad8\u5ea6\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-106\">\u304a\u308f\u308a\u306b<\/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\">\u5c0e\u5165\u90e8<\/h2>\n\n\n\n<p>PHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u306f\u907f\u3051\u3066\u901a\u308c\u306a\u3044\u8ab2\u984c\u3067\u3059\u3002\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3001\u30a4\u30d9\u30f3\u30c8\u7ba1\u7406\u3001\u30ed\u30b0\u89e3\u6790\u3001\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u51e6\u7406\u306a\u3069\u3001\u3042\u3089\u3086\u308b\u5834\u9762\u3067\u6b63\u78ba\u306a\u65e5\u6642\u306e\u53d6\u308a\u6271\u3044\u304c\u6c42\u3081\u3089\u308c\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u65e5\u4ed8\u3068\u6642\u9593\u306e\u6271\u3044\u306f\u4e00\u898b\u30b7\u30f3\u30d7\u30eb\u306b\u601d\u3048\u3066\u3001\u5b9f\u969b\u306b\u306f\u591a\u304f\u306e\u843d\u3068\u3057\u7a74\u304c\u6f5c\u3093\u3067\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u9055\u3044\u3001\u590f\u6642\u9593\u306e\u5207\u308a\u66ff\u3048\u3001\u3046\u308b\u3046\u5e74\u3084\u3046\u308b\u3046\u79d2\u306e\u8003\u616e\u3001\u65e5\u4ed8\u306e\u6bd4\u8f03\u3084\u8a08\u7b97\u3001\u7570\u306a\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u9593\u306e\u5909\u63db\u2026\u3053\u308c\u3089\u306e\u554f\u984c\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u3001PHP\u306f\u9577\u3044\u9032\u5316\u306e\u904e\u7a0b\u3067DateTime\u30af\u30e9\u30b9\u3068\u3044\u3046\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3092\u63d0\u4f9b\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u5f93\u6765\u306ePHP\u3067\u306f\u3001<code>date()<\/code>\u3001<code>strtotime()<\/code>\u3001<code>mktime()<\/code>\u306a\u3069\u306e\u95a2\u6570\u304c\u65e5\u4ed8\u51e6\u7406\u306b\u7528\u3044\u3089\u308c\u3066\u304d\u307e\u3057\u305f\u304c\u3001\u3053\u308c\u3089\u306e\u95a2\u6570\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u72b6\u614b\u306b\u4f9d\u5b58\u3057\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u6069\u6075\u3092\u53d7\u3051\u3089\u308c\u306a\u3044\u3068\u3044\u3046\u5236\u7d04\u304c\u3042\u308a\u307e\u3057\u305f\u3002PHP 5.2\u4ee5\u964d\u3067\u5c0e\u5165\u3055\u308c\u305fDateTime\u30af\u30e9\u30b9\u306f\u3001\u3053\u306e\u72b6\u6cc1\u3092\u4e00\u5909\u3055\u305b\u3001\u3088\u308a\u5805\u7262\u3067\u67d4\u8edf\u306a\u65e5\u4ed8\u51e6\u7406\u3092\u53ef\u80fd\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001PHP\u306eDateTime\u30af\u30e9\u30b9\u306b\u3064\u3044\u3066\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u5fb9\u5e95\u7684\u306b\u89e3\u8aac\u3057\u307e\u3059\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DateTime\u30af\u30e9\u30b9\u306e\u57fa\u672c\u6982\u5ff5\u3068\u5f93\u6765\u306e\u65e5\u4ed8\u95a2\u6570\u304b\u3089\u306e\u9032\u5316<\/li>\n\n\n\n<li>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4f5c\u6210\u304b\u3089\u57fa\u672c\u7684\u306a\u64cd\u4f5c\u307e\u3067\u306e\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/li>\n\n\n\n<li>\u65e5\u4ed8\u3068\u6642\u9593\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u63db\u306b\u304a\u3051\u308b\u69d8\u3005\u306a\u30c6\u30af\u30cb\u30c3\u30af<\/li>\n\n\n\n<li>\u56fd\u969b\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u4e0d\u53ef\u6b20\u306a\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u51e6\u7406\u306e\u30a2\u30d7\u30ed\u30fc\u30c1<\/li>\n\n\n\n<li>\u65e5\u4ed8\u306e\u8a08\u7b97\u3068\u64cd\u4f5c\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u305f\u3081\u306e\u30e1\u30bd\u30c3\u30c9<\/li>\n\n\n\n<li>\u3088\u308a\u5b89\u5168\u306a\u65e5\u4ed8\u64cd\u4f5c\u306e\u305f\u3081\u306eDateTimeImmutable\u30af\u30e9\u30b9\u306e\u6d3b\u7528\u6cd5<\/li>\n\n\n\n<li>JSON\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a\u306b\u304a\u3051\u308b\u6700\u9069\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/li>\n\n\n\n<li>\u958b\u767a\u8005\u304c\u9665\u308a\u304c\u3061\u306a5\u3064\u306e\u843d\u3068\u3057\u7a74\u3068\u305d\u306e\u56de\u907f\u7b56<\/li>\n\n\n\n<li>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u6d3b\u7528\u3067\u304d\u308b\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3092\u8aad\u307f\u7d42\u3048\u308b\u3053\u3068\u3067\u3001PHP\u3067\u306e\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u306b\u95a2\u3059\u308b\u77e5\u8b58\u304c\u4f53\u7cfb\u7684\u306b\u6574\u7406\u3055\u308c\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067DateTime\u30af\u30e9\u30b9\u3092\u6700\u5927\u9650\u306b\u6d3b\u7528\u3059\u308b\u30b9\u30ad\u30eb\u304c\u8eab\u306b\u3064\u304f\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>\u3055\u3042\u3001PHP\u306e\u65e5\u4ed8\u3068\u6642\u9593\u306e\u4e16\u754c\u3078\u98db\u3073\u8fbc\u307f\u3001DateTime\u30af\u30e9\u30b9\u306e\u30d1\u30ef\u30fc\u3092\u5b8c\u5168\u306b\u7406\u89e3\u3057\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">PHP\u306b\u304a\u3051\u308b\u65e5\u4ed8\u3068\u6642\u9593\u306e\u57fa\u672c\u6982\u5ff5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">DateTime\u30af\u30e9\u30b9\u304c\u89e3\u6c7a\u3059\u308b\u5f93\u6765\u306e\u65e5\u4ed8\u95a2\u6570\u306e\u554f\u984c\u70b9<\/h3>\n\n\n\n<p>PHP\u8a00\u8a9e\u306e\u6b74\u53f2\u306e\u4e2d\u3067\u3001\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u306f\u5e38\u306b\u91cd\u8981\u306a\u8ab2\u984c\u3067\u3057\u305f\u3002PHP 5.2\u3088\u308a\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306f\u3001\u65e5\u4ed8\u3068\u6642\u9593\u3092\u6271\u3046\u305f\u3081\u306b\u4e3b\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u95a2\u6570\u7fa4\u304c\u4f7f\u308f\u308c\u3066\u3044\u307e\u3057\u305f\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=\"\">\/\/ \u5f93\u6765\u306e\u65e5\u4ed8\u95a2\u6570\u306e\u4f8b\n$timestamp = time(); \/\/ \u73fe\u5728\u306eUNIX\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u53d6\u5f97\n$formatted_date = date('Y-m-d H:i:s', $timestamp); \/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n$future_timestamp = strtotime('+1 week'); \/\/ 1\u9031\u9593\u5f8c\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u8a08\u7b97\n<\/pre>\n\n\n\n<p>\u3057\u304b\u3057\u3001\u3053\u308c\u3089\u306e\u95a2\u6570\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u554f\u984c\u70b9\u304c\u3042\u308a\u307e\u3057\u305f\uff1a<\/p>\n\n\n<div id=\"id-82cb0337-dc2f-4633-a015-4003f36e6101\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u554f\u984c\u70b9<\/th><th>\u8aac\u660e<\/th><\/tr><\/thead><tbody><tr><td>\u30b0\u30ed\u30fc\u30d0\u30eb\u72b6\u614b\u3078\u306e\u4f9d\u5b58<\/td><td>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u304c\u30b0\u30ed\u30fc\u30d0\u30eb\u306b\u5f71\u97ff\u3059\u308b\u305f\u3081\u3001\u8907\u6570\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u540c\u6642\u306b\u6271\u3046\u306e\u304c\u56f0\u96e3<\/td><\/tr><tr><td>\u624b\u7d9a\u304d\u578b\u30a2\u30d7\u30ed\u30fc\u30c1<\/td><td>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u5229\u70b9\u3092\u6d3b\u304b\u305b\u306a\u3044<\/td><\/tr><tr><td>\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u4e0d\u5341\u5206\u3055<\/td><td>\u7121\u52b9\u306a\u65e5\u4ed8\u6587\u5b57\u5217\u3092\u51e6\u7406\u3059\u308b\u969b\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u304c\u4e0d\u660e\u78ba<\/td><\/tr><tr><td>\u4e00\u8cab\u6027\u306e\u6b20\u5982<\/td><td>\u7570\u306a\u308b\u95a2\u6570\u9593\u3067\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u9806\u5e8f\u3084\u52d5\u4f5c\u304c\u4e00\u8cab\u3057\u3066\u3044\u306a\u3044<\/td><\/tr><tr><td>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u51e6\u7406\u306e\u8907\u96d1\u3055<\/td><td>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u9593\u306e\u5909\u63db\u304c\u76f4\u611f\u7684\u3067\u306a\u3044<\/td><\/tr><tr><td>\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u306e\u4e0d\u53ef\u80fd\u6027<\/td><td>\u8907\u6570\u306e\u64cd\u4f5c\u3092\u9023\u9396\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u554f\u984c\u306f\u3001\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u307e\u305f\u3050\u30b5\u30fc\u30d3\u30b9\u306e\u958b\u767a\u306b\u304a\u3044\u3066\u7279\u306b\u9855\u8457\u306b\u306a\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u3042\u308b\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5408\u308f\u305b\u305f\u65e5\u4ed8\u8868\u793a\u3068\u3001\u5225\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5408\u308f\u305b\u305f\u65e5\u4ed8\u8868\u793a\u3092\u540c\u6642\u306b\u884c\u3046\u306e\u306f\u975e\u5e38\u306b\u8907\u96d1\u3067\u3057\u305f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">DateTime\u30af\u30e9\u30b9\u3068\u306f\uff1f\u305d\u306e\u7279\u5fb4\u3068\u5229\u70b9<\/h3>\n\n\n\n<p>PHP 5.2\u3067\u5c0e\u5165\u3055\u308c\u305f<code>DateTime<\/code>\u30af\u30e9\u30b9\u306f\u3001\u3053\u308c\u3089\u306e\u554f\u984c\u306b\u5bfe\u3059\u308b\u89e3\u6c7a\u7b56\u3068\u3057\u3066\u8a2d\u8a08\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u30af\u30e9\u30b9\u306f\u65e5\u4ed8\u3068\u6642\u9593\u3092\u6271\u3046\u305f\u3081\u306e\u5305\u62ec\u7684\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u63d0\u4f9b\u3057\u3001PHP 5.3\u4ee5\u964d\u3067\u306f\u3055\u3089\u306b\u6a5f\u80fd\u304c\u62e1\u5f35\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>DateTime\u30af\u30e9\u30b9\u306e\u4e3b\u306a\u7279\u5fb4\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u8a2d\u8a08<\/strong>\uff1a \u65e5\u4ed8\u3068\u6642\u9593\u306e\u60c5\u5831\u3092\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u30ab\u30d7\u30bb\u30eb\u5316\u3057\u3001\u95a2\u9023\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u30b5\u30dd\u30fc\u30c8<\/strong>\uff1a <code>DateTimeZone<\/code>\u30af\u30e9\u30b9\u3068\u306e\u9023\u643a\u306b\u3088\u308a\u3001\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u53d6\u308a\u6271\u3044\u304c\u683c\u6bb5\u306b\u5bb9\u6613\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/li>\n\n\n\n<li><strong>\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3<\/strong>\uff1a \u591a\u304f\u306e\u30e1\u30bd\u30c3\u30c9\u304c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u81ea\u8eab\u3092\u8fd4\u3059\u305f\u3081\u3001\u64cd\u4f5c\u3092\u9023\u9396\u3055\u305b\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8c4a\u5bcc\u306a\u64cd\u4f5c\u30e1\u30bd\u30c3\u30c9<\/strong>\uff1a \u65e5\u4ed8\u306e\u52a0\u7b97\u30fb\u6e1b\u7b97\u3001\u6bd4\u8f03\u3001\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u63db\u306a\u3069\u3001\u69d8\u3005\u306a\u64cd\u4f5c\u3092\u884c\u3046\u30e1\u30bd\u30c3\u30c9\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u56fd\u969b\u5316\u5bfe\u5fdc<\/strong>\uff1a \u3055\u307e\u3056\u307e\u306a\u56fd\u3084\u5730\u57df\u306e\u65e5\u4ed8\u5f62\u5f0f\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u67d4\u8edf\u306a\u65e5\u4ed8\u89e3\u6790<\/strong>\uff1a \u591a\u69d8\u306a\u5f62\u5f0f\u306e\u65e5\u4ed8\u6587\u5b57\u5217\u3092\u89e3\u6790\u3067\u304d\u308b\u6a5f\u80fd\u3092\u5099\u3048\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u95a2\u9023\u30af\u30e9\u30b9\u3068\u306e\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0<\/strong>\uff1a <code>DateTimeImmutable<\/code>\u3001<code>DateInterval<\/code>\u3001<code>DatePeriod<\/code>\u306a\u3069\u306e\u95a2\u9023\u30af\u30e9\u30b9\u3068\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u65e5\u4ed8\u51e6\u7406\u304c\u53ef\u80fd\u3067\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>DateTime\u30af\u30e9\u30b9\u306e\u57fa\u672c\u69cb\u9020\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/strong><\/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=\"\">\/\/ DateTime\u30af\u30e9\u30b9\u306e\u57fa\u672c\u69cb\u9020\nclass DateTime implements DateTimeInterface {\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    public function __construct(string $datetime = \"now\", ?DateTimeZone $timezone = null) {}\n    \n    \/\/ \u65e5\u4ed8\u6587\u5b57\u5217\u304b\u3089\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n    public static function createFromFormat(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTime|false {}\n    \n    \/\/ \u73fe\u5728\u306e\u65e5\u6642\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306e\u9759\u7684\u30e1\u30bd\u30c3\u30c9\n    public static function createFromImmutable(DateTimeImmutable $object): DateTime {}\n    \n    \/\/ \u65e5\u4ed8\u3092\u6307\u5b9a\u3057\u305f\u5f62\u5f0f\u3067\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n    public function format(string $format): string {}\n    \n    \/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u5909\u66f4\n    public function setTimezone(DateTimeZone $timezone): DateTime {}\n    \n    \/\/ \u65e5\u4ed8\u30fb\u6642\u9593\u306e\u5404\u90e8\u5206\u3092\u8a2d\u5b9a\n    public function setDate(int $year, int $month, int $day): DateTime {}\n    public function setTime(int $hour, int $minute, int $second = 0, int $microsecond = 0): DateTime {}\n    \n    \/\/ \u65e5\u4ed8\u3092\u4fee\u6b63\n    public function modify(string $modifier): DateTime|false {}\n    \n    \/\/ DateInterval\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u3066\u65e5\u4ed8\u3092\u52a0\u7b97\u30fb\u6e1b\u7b97\n    public function add(DateInterval $interval): DateTime {}\n    public function sub(DateInterval $interval): DateTime {}\n    \n    \/\/ 2\u3064\u306e\u65e5\u4ed8\u306e\u5dee\u3092DateInterval\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u53d6\u5f97\n    public function diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval {}\n    \n    \/\/ \u305d\u306e\u4ed6\u591a\u6570\u306e\u30e1\u30bd\u30c3\u30c9...\n}\n<\/pre>\n\n\n\n<p>DateTime\u30af\u30e9\u30b9\u306e\u5c0e\u5165\u306b\u3088\u308a\u3001PHP\u306e\u65e5\u4ed8\u51e6\u7406\u306f\u5927\u304d\u304f\u6539\u5584\u3055\u308c\u307e\u3057\u305f\u3002\u4f8b\u3048\u3070\u3001\u7570\u306a\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3067\u306e\u65e5\u4ed8\u8a08\u7b97\u3001\u8907\u96d1\u306a\u65e5\u4ed8\u64cd\u4f5c\u3001\u65e5\u4ed8\u6bd4\u8f03\u306a\u3069\u304c\u683c\u6bb5\u306b\u5bb9\u6613\u306b\u306a\u308a\u3001\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u3082\u5411\u4e0a\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001PHP 7\u4ee5\u964d\u3067\u306f\u3001\u3055\u3089\u306b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u6539\u5584\u3055\u308c\u3001\u65b0\u3057\u3044\u30e1\u30bd\u30c3\u30c9\u304c\u8ffd\u52a0\u3055\u308c\u308b\u306a\u3069\u3001\u7d99\u7d9a\u7684\u306a\u9032\u5316\u3092\u9042\u3052\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u306eDateTime\u30af\u30e9\u30b9\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u306b\u3064\u3044\u3066\u3001\u5177\u4f53\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3068\u3068\u3082\u306b\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">DateTime\u30af\u30e9\u30b9\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<p>DateTime\u30af\u30e9\u30b9\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u306b\u306f\u3001\u307e\u305a\u306f\u305d\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u7406\u89e3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u65b9\u6cd5\u3068\u73fe\u5728\u65e5\u6642\u306e\u53d6\u5f97\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4f5c\u6210\u65b9\u6cd5\u3068\u4e3b\u8981\u306a\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30aa\u30d7\u30b7\u30e7\u30f3<\/h3>\n\n\n\n<p>DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u306f\u4e3b\u306b2\u3064\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/strong><\/li>\n\n\n\n<li><strong>\u9759\u7684\u30d5\u30a1\u30af\u30c8\u30ea\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-6\">\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u4f7f\u7528\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210<\/h4>\n\n\n\n<p>\u6700\u3082\u57fa\u672c\u7684\u306a\u65b9\u6cd5\u306f\u3001<code>DateTime<\/code>\u30af\u30e9\u30b9\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3059\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\u6642\u3067\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n$datetime = new DateTime();\n\n\/\/ \u7279\u5b9a\u306e\u65e5\u6642\u6587\u5b57\u5217\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n$datetime = new DateTime('2023-07-15 14:30:00');\n\n\/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u6307\u5b9a\u3057\u3066\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n$datetime = new DateTime('now', new DateTimeZone('Asia\/Tokyo'));\n<\/pre>\n\n\n\n<p>\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-6dee2264-6f73-40df-b0c6-cdf56c7e7a4a\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d1\u30e9\u30e1\u30fc\u30bf<\/th><th>\u578b<\/th><th>\u8aac\u660e<\/th><th>\u30c7\u30d5\u30a9\u30eb\u30c8\u5024<\/th><\/tr><\/thead><tbody><tr><td>$datetime<\/td><td>string<\/td><td>\u65e5\u6642\u3092\u8868\u3059\u6587\u5b57\u5217<\/td><td>\u201cnow\u201d<\/td><\/tr><tr><td>$timezone<\/td><td>DateTimeZone|null<\/td><td>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/td><td>null (\u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3)<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u6e21\u3059\u65e5\u6642\u6587\u5b57\u5217\u306f\u3001\u3055\u307e\u3056\u307e\u306a\u5f62\u5f0f\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\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=\"\">\/\/ ISO 8601\u5f62\u5f0f\n$datetime = new DateTime('2023-07-15T14:30:00+09:00');\n\n\/\/ \u76f8\u5bfe\u7684\u306a\u8868\u73fe\n$datetime = new DateTime('next Monday');\n$datetime = new DateTime('+1 week 2 days 4 hours 2 seconds');\n$datetime = new DateTime('last day of February 2023');\n\n\/\/ \u81ea\u7136\u8a00\u8a9e\u306b\u8fd1\u3044\u8868\u73fe\n$datetime = new DateTime('first day of January 2023');\n<\/pre>\n\n\n\n<p>\u305f\u3060\u3057\u3001\u4efb\u610f\u306e\u6587\u5b57\u5217\u304c\u6709\u52b9\u306a\u65e5\u4ed8\u3068\u3057\u3066\u89e3\u91c8\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u7121\u52b9\u306a\u65e5\u4ed8\u6587\u5b57\u5217\u3092\u6e21\u3059\u3068\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3059\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=\"\">try {\n    $datetime = new DateTime('invalid date');\n} catch (Exception $e) {\n    echo '\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f: ' . $e-&gt;getMessage();\n    \/\/ \u51fa\u529b: \u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f: Failed to parse time string (invalid date)...\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">\u9759\u7684\u30d5\u30a1\u30af\u30c8\u30ea\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210<\/h4>\n\n\n\n<p>\u3088\u308a\u53b3\u5bc6\u306b\u65e5\u4ed8\u5f62\u5f0f\u3092\u6307\u5b9a\u3057\u305f\u3044\u5834\u5408\u306f\u3001<code>createFromFormat<\/code>\u9759\u7684\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\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=\"\">\/\/ \u7279\u5b9a\u306e\u5f62\u5f0f\u306e\u65e5\u4ed8\u6587\u5b57\u5217\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n$datetime = DateTime::createFromFormat(\n    'Y-m-d H:i:s',\n    '2023-07-15 14:30:00'\n);\n\n\/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u4ed8\u304d\u3067\u7279\u5b9a\u5f62\u5f0f\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n$datetime = DateTime::createFromFormat(\n    'Y-m-d H:i:s',\n    '2023-07-15 14:30:00',\n    new DateTimeZone('Europe\/Paris')\n);\n<\/pre>\n\n\n\n<p><code>createFromFormat<\/code>\u30e1\u30bd\u30c3\u30c9\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-b75fcc09-a032-4c01-9a7f-7e8b51f6f6c7\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d1\u30e9\u30e1\u30fc\u30bf<\/th><th>\u578b<\/th><th>\u8aac\u660e<\/th><\/tr><\/thead><tbody><tr><td>$format<\/td><td>string<\/td><td>\u65e5\u4ed8\u306e\u66f8\u5f0f\u3092\u6307\u5b9a\u3059\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6587\u5b57\u5217<\/td><\/tr><tr><td>$datetime<\/td><td>string<\/td><td>\u89e3\u6790\u3059\u308b\u65e5\u6642\u6587\u5b57\u5217<\/td><\/tr><tr><td>$timezone<\/td><td>DateTimeZone|null<\/td><td>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><code>createFromFormat<\/code>\u3092\u4f7f\u7528\u3059\u308b\u5229\u70b9\u306f\u3001\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u6b63\u78ba\u306b\u6307\u5b9a\u3067\u304d\u308b\u305f\u3081\u3001\u5f62\u5f0f\u304c\u4e0d\u660e\u78ba\u306a\u6587\u5b57\u5217\u3092\u89e3\u6790\u3059\u308b\u969b\u306e\u554f\u984c\u3092\u907f\u3051\u3089\u308c\u308b\u3053\u3068\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u201910-05-2023\u2019\u3068\u3044\u3046\u6587\u5b57\u5217\u304c\u300c10\u67085\u65e5\u300d\u306a\u306e\u304b\u300c5\u670810\u65e5\u300d\u306a\u306e\u304b\u306f\u3001\u5730\u57df\u3084\u7fd2\u6163\u306b\u3088\u3063\u3066\u89e3\u91c8\u304c\u7570\u306a\u308a\u307e\u3059\u304c\u3001\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u660e\u793a\u3059\u308b\u3053\u3068\u3067\u3053\u306e\u3088\u3046\u306a\u66d6\u6627\u3055\u3092\u6392\u9664\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><code>createFromFormat<\/code>\u30e1\u30bd\u30c3\u30c9\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u306f<code>false<\/code>\u3092\u8fd4\u3059\u305f\u3081\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u6210\u529f\u3057\u305f\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3059\u308b\u306e\u304c\u826f\u3044\u5b9f\u8df5\u3067\u3059\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=\"\">$datetime = DateTime::createFromFormat('Y-m-d', '2023-13-45'); \/\/ \u7121\u52b9\u306a\u65e5\u4ed8\nif ($datetime === false) {\n    $errors = DateTime::getLastErrors();\n    echo \"\u65e5\u4ed8\u306e\u30d1\u30fc\u30b9\u306b\u5931\u6557\u3057\u307e\u3057\u305f:\\n\";\n    print_r($errors);\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u73fe\u5728\u306e\u65e5\u6642\u3092\u53d6\u5f97\u3059\u308b\u8907\u6570\u306e\u65b9\u6cd5\u3068\u305d\u306e\u9055\u3044<\/h3>\n\n\n\n<p>\u73fe\u5728\u306e\u65e5\u6642\u3092\u8868\u3059DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u306f\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">1. \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u3088\u308b\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=\"\">\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3067\u73fe\u5728\u306e\u65e5\u6642\u3092\u53d6\u5f97\n$now = new DateTime();\n\n\/\/ \u7279\u5b9a\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3067\u73fe\u5728\u306e\u65e5\u6642\u3092\u53d6\u5f97\n$now = new DateTime('now', new DateTimeZone('America\/New_York'));\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">2. <code>createFromFormat<\/code>\u306b\u3088\u308b\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\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u304b\u3089\u4f5c\u6210\n$now = DateTime::createFromFormat('U', time());\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-11\">3. \u5225\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304b\u3089\u30b3\u30d4\u30fc\u3092\u4f5c\u6210<\/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=\"\">$original = new DateTime('now');\n$copy = clone $original;\n<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u65b9\u6cd5\u306e\u4e3b\u306a\u9055\u3044\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-6af3b44d-510f-4181-af46-07284ee6b052\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u65b9\u6cd5<\/th><th>\u5229\u70b9<\/th><th>\u6b20\u70b9<\/th><\/tr><\/thead><tbody><tr><td>\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf<\/td><td>\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u611f\u7684<\/td><td>\u7d30\u304b\u3044\u5236\u5fa1\u304c\u96e3\u3057\u3044<\/td><\/tr><tr><td>createFromFormat<\/td><td>\u3088\u308a\u7d30\u304b\u3044\u5236\u5fa1\u304c\u53ef\u80fd<\/td><td>\u30b3\u30fc\u30c9\u304c\u5197\u9577\u306b\u306a\u308b<\/td><\/tr><tr><td>\u30af\u30ed\u30fc\u30f3<\/td><td>\u65e2\u5b58\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5358\u7d14\u306a\u30b3\u30d4\u30fc\u306b\u6700\u9069<\/td><td>\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u73fe\u5728\u306e\u65e5\u6642\u3092\u53d6\u5f97\u3057\u305f\u5f8c\u3001\u69d8\u3005\u306a\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u3066\u65e5\u6642\u306e\u60c5\u5831\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\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=\"\">$now = new DateTime();\n\n\/\/ \u5e74\u3001\u6708\u3001\u65e5\u3092\u500b\u5225\u306b\u53d6\u5f97\n$year = (int)$now-&gt;format('Y');    \/\/ \u4f8b: 2023\n$month = (int)$now-&gt;format('m');   \/\/ \u4f8b: 7 (7\u6708)\n$day = (int)$now-&gt;format('d');     \/\/ \u4f8b: 15\n\n\/\/ \u6642\u3001\u5206\u3001\u79d2\u3092\u500b\u5225\u306b\u53d6\u5f97\n$hour = (int)$now-&gt;format('H');    \/\/ \u4f8b: 14 (24\u6642\u9593\u5f62\u5f0f)\n$minute = (int)$now-&gt;format('i');  \/\/ \u4f8b: 30\n$second = (int)$now-&gt;format('s');  \/\/ \u4f8b: 45\n\n\/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u53d6\u5f97\n$timestamp = $now-&gt;getTimestamp(); \/\/ \u4f8b: 1689415845\n\n\/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u60c5\u5831\u3092\u53d6\u5f97\n$timezone = $now-&gt;getTimezone();\n$tzName = $timezone-&gt;getName();    \/\/ \u4f8b: \"Asia\/Tokyo\"\n<\/pre>\n\n\n\n<p>DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u3001\u65e5\u4ed8\u306e\u69d8\u3005\u306a\u90e8\u5206\u3092\u53d6\u5f97\u30fb\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306e\u591a\u6570\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u65e5\u6642\u306e\u64cd\u4f5c\u304c\u975e\u5e38\u306b\u67d4\u8edf\u306b\u884c\u3048\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=\"\">$datetime = new DateTime('2023-07-15 14:30:45');\n\n\/\/ \u65e5\u4ed8\u90e8\u5206\u306e\u8a2d\u5b9a\n$datetime-&gt;setDate(2023, 12, 31);  \/\/ 2023\u5e7412\u670831\u65e5\u306b\u5909\u66f4\n\n\/\/ \u6642\u9593\u90e8\u5206\u306e\u8a2d\u5b9a\n$datetime-&gt;setTime(23, 59, 59);    \/\/ 23\u664259\u520659\u79d2\u306b\u5909\u66f4\n\n\/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u306e\u8a2d\u5b9a\n$datetime-&gt;setTimestamp(1672502400); \/\/ 2023\u5e741\u67081\u65e5 00:00:00\u306b\u5909\u66f4\n<\/pre>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u65e5\u4ed8\u3068\u6642\u9593\u3092\u3055\u307e\u3056\u307e\u306a\u5f62\u5f0f\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u306e\u8868\u793a\u3084\u30c7\u30fc\u30bf\u4ea4\u63db\u306b\u304a\u3044\u3066\u975e\u5e38\u306b\u91cd\u8981\u306a\u5074\u9762\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u65e5\u4ed8\u3068\u6642\u9593\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u63db\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<p>\u65e5\u4ed8\u3084\u6642\u9593\u3092\u6271\u3046\u969b\u306b\u3001\u6700\u3082\u983b\u7e41\u306b\u884c\u3046\u64cd\u4f5c\u306e\u4e00\u3064\u304c\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u63db\u3067\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u8868\u793a\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4fdd\u5b58\u3001API\u9023\u643a\u306a\u3069\u3001\u7528\u9014\u306b\u5fdc\u3058\u3066\u69d8\u3005\u306a\u5f62\u5f0f\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002PHP\u306eDateTime\u30af\u30e9\u30b9\u306f\u3001\u3053\u3046\u3057\u305f\u5909\u63db\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u305f\u3081\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">format()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u305f\u30ab\u30b9\u30bf\u30e0\u51fa\u529b\u5f62\u5f0f\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>DateTime\u30af\u30e9\u30b9\u306e\u6700\u3082\u57fa\u672c\u7684\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u306f<code>format()<\/code>\u3067\u3059\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3046\u3068\u3001\u65e5\u4ed8\u3068\u6642\u9593\u3092\u307b\u307c\u4efb\u610f\u306e\u5f62\u5f0f\u306b\u5909\u63db\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=\"\">$datetime = new DateTime('2023-07-15 14:30:45');\n\n\/\/ \u57fa\u672c\u7684\u306a\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $datetime-&gt;format('Y-m-d');           \/\/ \u51fa\u529b: 2023-07-15\necho $datetime-&gt;format('d\/m\/Y');           \/\/ \u51fa\u529b: 15\/07\/2023\necho $datetime-&gt;format('m\/d\/Y');           \/\/ \u51fa\u529b: 07\/15\/2023\necho $datetime-&gt;format('Y\u5e74m\u6708d\u65e5');        \/\/ \u51fa\u529b: 2023\u5e7407\u670815\u65e5\n\n\/\/ \u6642\u9593\u3092\u542b\u3080\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $datetime-&gt;format('Y-m-d H:i:s');     \/\/ \u51fa\u529b: 2023-07-15 14:30:45\necho $datetime-&gt;format('Y-m-d h:i:s A');   \/\/ \u51fa\u529b: 2023-07-15 02:30:45 PM\necho $datetime-&gt;format('H\u6642i\u5206s\u79d2');        \/\/ \u51fa\u529b: 14\u664230\u520645\u79d2\n\n\/\/ \u66dc\u65e5\u3084\u6708\u540d\u3092\u542b\u3080\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $datetime-&gt;format('l, F j, Y');       \/\/ \u51fa\u529b: Saturday, July 15, 2023\necho $datetime-&gt;format('D, M j, Y');       \/\/ \u51fa\u529b: Sat, Jul 15, 2023\n\n\/\/ RFC 3339\u5f62\u5f0f\uff08ISO 8601\u4e92\u63db\uff09- API\u3067\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\necho $datetime-&gt;format(DateTime::RFC3339); \/\/ \u51fa\u529b: 2023-07-15T14:30:45+00:00\n\n\/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u60c5\u5831\u3092\u542b\u3080\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $datetime-&gt;format('Y-m-d H:i:s e');   \/\/ \u51fa\u529b: 2023-07-15 14:30:45 UTC\necho $datetime-&gt;format('Y-m-d H:i:s T');   \/\/ \u51fa\u529b: 2023-07-15 14:30:45 UTC\necho $datetime-&gt;format('Y-m-d H:i:s P');   \/\/ \u51fa\u529b: 2023-07-15 14:30:45 +00:00\n<\/pre>\n\n\n\n<p><code>format()<\/code>\u30e1\u30bd\u30c3\u30c9\u3067\u4f7f\u7528\u3067\u304d\u308b\u4e3b\u306a\u66f8\u5f0f\u6587\u5b57\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-cad019eb-59cd-4eb9-8d34-35f3ffed0c29\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5206\u985e<\/th><th>\u6587\u5b57<\/th><th>\u8aac\u660e<\/th><th>\u4f8b<\/th><\/tr><\/thead><tbody><tr><td><strong>\u65e5<\/strong><\/td><td>d<\/td><td>\u65e5\uff082\u6841\u3001\u5148\u982d\u306b\u30bc\u30ed\u3042\u308a\uff09<\/td><td>01\u301c31<\/td><\/tr><tr><td><\/td><td>j<\/td><td>\u65e5\uff08\u5148\u982d\u306b\u30bc\u30ed\u306a\u3057\uff09<\/td><td>1\u301c31<\/td><\/tr><tr><td><\/td><td>S<\/td><td>\u82f1\u8a9e\u306e\u5e8f\u6570\u8868\u73fe\u306e\u30b5\u30d5\u30a3\u30c3\u30af\u30b9<\/td><td>st, nd, rd, th<\/td><\/tr><tr><td><strong>\u66dc\u65e5<\/strong><\/td><td>l<\/td><td>\u66dc\u65e5\uff08\u30d5\u30eb\u30b9\u30da\u30eb\uff09<\/td><td>Sunday\u301cSaturday<\/td><\/tr><tr><td><\/td><td>D<\/td><td>\u66dc\u65e5\uff083\u6587\u5b57\uff09<\/td><td>Sun\u301cSat<\/td><\/tr><tr><td><\/td><td>w<\/td><td>\u66dc\u65e5\uff08\u6570\u5024\uff09<\/td><td>0\uff08\u65e5\u66dc\uff09\u301c6\uff08\u571f\u66dc\uff09<\/td><\/tr><tr><td><strong>\u6708<\/strong><\/td><td>m<\/td><td>\u6708\uff082\u6841\u3001\u5148\u982d\u306b\u30bc\u30ed\u3042\u308a\uff09<\/td><td>01\u301c12<\/td><\/tr><tr><td><\/td><td>n<\/td><td>\u6708\uff08\u5148\u982d\u306b\u30bc\u30ed\u306a\u3057\uff09<\/td><td>1\u301c12<\/td><\/tr><tr><td><\/td><td>F<\/td><td>\u6708\uff08\u30d5\u30eb\u30b9\u30da\u30eb\uff09<\/td><td>January\u301cDecember<\/td><\/tr><tr><td><\/td><td>M<\/td><td>\u6708\uff083\u6587\u5b57\uff09<\/td><td>Jan\u301cDec<\/td><\/tr><tr><td><strong>\u5e74<\/strong><\/td><td>Y<\/td><td>\u5e74\uff084\u6841\uff09<\/td><td>\u4f8b\uff1a2023<\/td><\/tr><tr><td><\/td><td>y<\/td><td>\u5e74\uff082\u6841\uff09<\/td><td>\u4f8b\uff1a23<\/td><\/tr><tr><td><strong>\u6642\u9593<\/strong><\/td><td>H<\/td><td>\u6642\uff0824\u6642\u9593\u5f62\u5f0f\u30012\u6841\uff09<\/td><td>00\u301c23<\/td><\/tr><tr><td><\/td><td>h<\/td><td>\u6642\uff0812\u6642\u9593\u5f62\u5f0f\u30012\u6841\uff09<\/td><td>01\u301c12<\/td><\/tr><tr><td><\/td><td>G<\/td><td>\u6642\uff0824\u6642\u9593\u5f62\u5f0f\u3001\u5148\u982d\u306b\u30bc\u30ed\u306a\u3057\uff09<\/td><td>0\u301c23<\/td><\/tr><tr><td><\/td><td>g<\/td><td>\u6642\uff0812\u6642\u9593\u5f62\u5f0f\u3001\u5148\u982d\u306b\u30bc\u30ed\u306a\u3057\uff09<\/td><td>1\u301c12<\/td><\/tr><tr><td><strong>\u5206\u79d2<\/strong><\/td><td>i<\/td><td>\u5206\uff082\u6841\uff09<\/td><td>00\u301c59<\/td><\/tr><tr><td><\/td><td>s<\/td><td>\u79d2\uff082\u6841\uff09<\/td><td>00\u301c59<\/td><\/tr><tr><td><\/td><td>u<\/td><td>\u30de\u30a4\u30af\u30ed\u79d2<\/td><td>\u4f8b\uff1a654321<\/td><\/tr><tr><td><strong>\u5348\u524d\/\u5348\u5f8c<\/strong><\/td><td>A<\/td><td>\u5348\u524d\/\u5348\u5f8c\uff08\u5927\u6587\u5b57\uff09<\/td><td>AM \u307e\u305f\u306f PM<\/td><\/tr><tr><td><\/td><td>a<\/td><td>\u5348\u524d\/\u5348\u5f8c\uff08\u5c0f\u6587\u5b57\uff09<\/td><td>am \u307e\u305f\u306f pm<\/td><\/tr><tr><td><strong>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3<\/strong><\/td><td>e<\/td><td>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8b58\u5225\u5b50<\/td><td>\u4f8b\uff1aUTC, Europe\/Paris<\/td><\/tr><tr><td><\/td><td>T<\/td><td>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u7565\u79f0<\/td><td>\u4f8b\uff1aUTC, EST, MDT<\/td><\/tr><tr><td><\/td><td>P<\/td><td>\u5dee\u5206\uff08\u30b3\u30ed\u30f3\u4ed8\u304d\uff09<\/td><td>\u4f8b\uff1a+00:00<\/td><\/tr><tr><td><\/td><td>O<\/td><td>\u5dee\u5206\uff08\u30b3\u30ed\u30f3\u7121\u3057\uff09<\/td><td>\u4f8b\uff1a+0000<\/td><\/tr><tr><td><strong>\u5b8c\u5168\u306a\u65e5\u6642<\/strong><\/td><td>c<\/td><td>ISO 8601\u5f62\u5f0f<\/td><td>\u4f8b\uff1a2023-07-15T14:30:45+00:00<\/td><\/tr><tr><td><\/td><td>r<\/td><td>RFC 2822\u5f62\u5f0f<\/td><td>\u4f8b\uff1aSat, 15 Jul 2023 14:30:45 +0000<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u307e\u305f\u3001DateTime\u30af\u30e9\u30b9\u306b\u306f\u3001\u4e00\u822c\u7684\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u7c21\u5358\u306b\u6307\u5b9a\u3067\u304d\u308b\u5b9a\u6570\u3082\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\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=\"\">$datetime = new DateTime('2023-07-15 14:30:45');\n\n\/\/ \u7d44\u307f\u8fbc\u307f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5b9a\u6570\u306e\u5229\u7528\necho $datetime-&gt;format(DateTime::ATOM);      \/\/ \u51fa\u529b: 2023-07-15T14:30:45+00:00\necho $datetime-&gt;format(DateTime::COOKIE);    \/\/ \u51fa\u529b: Saturday, 15-Jul-2023 14:30:45 UTC\necho $datetime-&gt;format(DateTime::ISO8601);   \/\/ \u51fa\u529b: 2023-07-15T14:30:45+0000\necho $datetime-&gt;format(DateTime::RFC822);    \/\/ \u51fa\u529b: Sat, 15 Jul 23 14:30:45 +0000\necho $datetime-&gt;format(DateTime::RFC850);    \/\/ \u51fa\u529b: Saturday, 15-Jul-23 14:30:45 UTC\necho $datetime-&gt;format(DateTime::RFC1036);   \/\/ \u51fa\u529b: Sat, 15 Jul 23 14:30:45 +0000\necho $datetime-&gt;format(DateTime::RFC1123);   \/\/ \u51fa\u529b: Sat, 15 Jul 2023 14:30:45 +0000\necho $datetime-&gt;format(DateTime::RFC2822);   \/\/ \u51fa\u529b: Sat, 15 Jul 2023 14:30:45 +0000\necho $datetime-&gt;format(DateTime::RFC3339);   \/\/ \u51fa\u529b: 2023-07-15T14:30:45+00:00\necho $datetime-&gt;format(DateTime::RSS);       \/\/ \u51fa\u529b: Sat, 15 Jul 2023 14:30:45 +0000\necho $datetime-&gt;format(DateTime::W3C);       \/\/ \u51fa\u529b: 2023-07-15T14:30:45+00:00\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u305f\u3081\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6226\u7565<\/h3>\n\n\n\n<p>\u591a\u8a00\u8a9e\u30b5\u30a4\u30c8\u3084\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u5834\u5408\u3001\u65e5\u4ed8\u3068\u6642\u9593\u306e\u8868\u793a\u306f\u5404\u5730\u57df\u306e\u7fd2\u6163\u306b\u5408\u308f\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002PHP\u3067\u306f\u3001\u4e3b\u306b\u4ee5\u4e0b\u306e\u65b9\u6cd5\u3067\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">1. IntlDateFormatter\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\uff08PHP Intl\u62e1\u5f35\uff09<\/h4>\n\n\n\n<p>PHP Intl\u62e1\u5f35\u306f\u3001\u56fd\u969b\u5316\u306b\u95a2\u3059\u308b\u591a\u304f\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001\u305d\u306e\u4e2d\u306b\u306f\u30ed\u30b1\u30fc\u30eb\u306b\u57fa\u3065\u3044\u305f\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3082\u542b\u307e\u308c\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=\"\">\/\/ IntlDateFormatter\u306b\u3088\u308b\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n\/\/ \u524d\u63d0\u6761\u4ef6: PHP Intl\u62e1\u5f35\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068\n\n$datetime = new DateTime('2023-07-15 14:30:45');\n\n\/\/ \u30ed\u30b1\u30fc\u30eb\u3068\u8868\u793a\u30b9\u30bf\u30a4\u30eb\u3092\u6307\u5b9a\n$formatter = new IntlDateFormatter(\n    'ja_JP',                                   \/\/ \u30ed\u30b1\u30fc\u30eb (\u65e5\u672c)\n    IntlDateFormatter::LONG,                   \/\/ \u65e5\u4ed8\u306e\u30b9\u30bf\u30a4\u30eb\n    IntlDateFormatter::SHORT,                  \/\/ \u6642\u9593\u306e\u30b9\u30bf\u30a4\u30eb\n    'Asia\/Tokyo'                               \/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\n);\n\necho $formatter-&gt;format($datetime);            \/\/ \u51fa\u529b: 2023\u5e747\u670815\u65e5 14:30\n\n\/\/ \u7570\u306a\u308b\u30ed\u30b1\u30fc\u30eb\u3067\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n$formatter_us = new IntlDateFormatter(\n    'en_US',                                   \/\/ \u30ed\u30b1\u30fc\u30eb (\u30a2\u30e1\u30ea\u30ab)\n    IntlDateFormatter::LONG,                   \/\/ \u65e5\u4ed8\u306e\u30b9\u30bf\u30a4\u30eb\n    IntlDateFormatter::SHORT,                  \/\/ \u6642\u9593\u306e\u30b9\u30bf\u30a4\u30eb\n    'America\/New_York'                         \/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\n);\n\necho $formatter_us-&gt;format($datetime);         \/\/ \u51fa\u529b: July 15, 2023 at 10:30 AM\n\n\/\/ \u30d5\u30e9\u30f3\u30b9\u8a9e\u30ed\u30b1\u30fc\u30eb\u3067\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n$formatter_fr = new IntlDateFormatter(\n    'fr_FR',                                   \/\/ \u30ed\u30b1\u30fc\u30eb (\u30d5\u30e9\u30f3\u30b9)\n    IntlDateFormatter::FULL,                   \/\/ \u65e5\u4ed8\u306e\u30b9\u30bf\u30a4\u30eb\n    IntlDateFormatter::MEDIUM,                 \/\/ \u6642\u9593\u306e\u30b9\u30bf\u30a4\u30eb\n    'Europe\/Paris'                             \/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\n);\n\necho $formatter_fr-&gt;format($datetime);         \/\/ \u51fa\u529b: samedi 15 juillet 2023 \u00e0 16:30:45\n\nIntlDateFormatter\u306e\u30b9\u30bf\u30a4\u30eb\u5b9a\u6570\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u304c\u3042\u308a\u307e\u3059\uff1a\n\n| \u5b9a\u6570 | \u8aac\u660e | \u4f8b |\n|------|------|-----|\n| IntlDateFormatter::FULL | \u5b8c\u5168\u306a\u5f62\u5f0f | 2023\u5e747\u670815\u65e5\u571f\u66dc\u65e5 |\n| IntlDateFormatter::LONG | \u9577\u3044\u5f62\u5f0f | 2023\u5e747\u670815\u65e5 |\n| IntlDateFormatter::MEDIUM | \u4e2d\u7a0b\u5ea6\u306e\u5f62\u5f0f | 2023\/07\/15 |\n| IntlDateFormatter::SHORT | \u77ed\u3044\u5f62\u5f0f | 23\/07\/15 |\n| IntlDateFormatter::NONE | \u8868\u793a\u3057\u306a\u3044 | - |\n\n#### 2. \u5404\u30ed\u30b1\u30fc\u30eb\u7528\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\n\nIntl\u62e1\u5f35\u304c\u4f7f\u7528\u3067\u304d\u306a\u3044\u74b0\u5883\u3067\u306f\u3001\u5404\u30ed\u30b1\u30fc\u30eb\u306b\u5bfe\u5fdc\u3059\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u72ec\u81ea\u306b\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\uff1a\n\n```php\n\/\/ \u5404\u30ed\u30b1\u30fc\u30eb\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30d1\u30bf\u30fc\u30f3\u3092\u5b9a\u7fa9\n$date_formats = [\n    'ja' =&gt; [\n        'date_full' =&gt; 'Y\u5e74m\u6708d\u65e5\uff08D\uff09',\n        'date_short' =&gt; 'Y\/m\/d',\n        'time' =&gt; 'H\u6642i\u5206s\u79d2',\n        'datetime' =&gt; 'Y\u5e74m\u6708d\u65e5 H:i',\n    ],\n    'en' =&gt; [\n        'date_full' =&gt; 'l, F j, Y',\n        'date_short' =&gt; 'm\/d\/Y',\n        'time' =&gt; 'h:i:s A',\n        'datetime' =&gt; 'F j, Y h:i A',\n    ],\n    'fr' =&gt; [\n        'date_full' =&gt; 'l j F Y',\n        'date_short' =&gt; 'd\/m\/Y',\n        'time' =&gt; 'H:i:s',\n        'datetime' =&gt; 'j F Y H:i',\n    ],\n];\n\n$datetime = new DateTime('2023-07-15 14:30:45');\n\n\/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30b1\u30fc\u30eb\u306b\u57fa\u3065\u3044\u3066\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u9078\u629e\n$locale = 'ja'; \/\/ \u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a\u304b\u3089\u53d6\u5f97\n$format = $date_formats[$locale]['datetime'];\n\necho $datetime-&gt;format($format); \/\/ \u51fa\u529b: 2023\u5e7407\u670815\u65e5 14:30\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-16\">3. \u7ffb\u8a33\u30ea\u30bd\u30fc\u30b9\u3068\u7d44\u307f\u5408\u308f\u305b\u305f\u30a2\u30d7\u30ed\u30fc\u30c1<\/h4>\n\n\n\n<p>\u66dc\u65e5\u3084\u6708\u540d\u3092\u7ffb\u8a33\u30ea\u30bd\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u3057\u3001\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5f8c\u306b\u7f6e\u63db\u3059\u308b\u65b9\u6cd5\u3082\u6709\u52b9\u3067\u3059\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=\"\">$datetime = new DateTime('2023-07-15 14:30:45');\n\n\/\/ \u307e\u305a\u6a19\u6e96\u7684\u306a\u82f1\u8a9e\u5f62\u5f0f\u3067\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n$formatted = $datetime-&gt;format('l, F j, Y');\n\n\/\/ \u7ffb\u8a33\u30ea\u30bd\u30fc\u30b9\uff08\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u7ffb\u8a33\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8aad\u307f\u8fbc\u3080\uff09\n$translations = [\n    'ja' =&gt; [\n        'days' =&gt; [\n            'Monday' =&gt; '\u6708\u66dc\u65e5',\n            'Tuesday' =&gt; '\u706b\u66dc\u65e5',\n            'Wednesday' =&gt; '\u6c34\u66dc\u65e5',\n            'Thursday' =&gt; '\u6728\u66dc\u65e5',\n            'Friday' =&gt; '\u91d1\u66dc\u65e5',\n            'Saturday' =&gt; '\u571f\u66dc\u65e5',\n            'Sunday' =&gt; '\u65e5\u66dc\u65e5',\n        ],\n        'months' =&gt; [\n            'January' =&gt; '1\u6708',\n            'February' =&gt; '2\u6708',\n            'March' =&gt; '3\u6708',\n            'April' =&gt; '4\u6708',\n            'May' =&gt; '5\u6708',\n            'June' =&gt; '6\u6708',\n            'July' =&gt; '7\u6708',\n            'August' =&gt; '8\u6708',\n            'September' =&gt; '9\u6708',\n            'October' =&gt; '10\u6708',\n            'November' =&gt; '11\u6708',\n            'December' =&gt; '12\u6708',\n        ],\n    ],\n];\n\n\/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30b1\u30fc\u30eb\n$locale = 'ja';\n\n\/\/ \u66dc\u65e5\u3068\u6708\u540d\u3092\u7f6e\u63db\nforeach ($translations[$locale]['days'] as $en =&gt; $trans) {\n    $formatted = str_replace($en, $trans, $formatted);\n}\n\nforeach ($translations[$locale]['months'] as $en =&gt; $trans) {\n    $formatted = str_replace($en, $trans, $formatted);\n}\n\n\/\/ \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u8abf\u6574\uff08\u4f8b\uff1a\u30b3\u30f3\u30de\u3092\u524a\u9664\u3057\u3001\u5e74\u3092\u8ffd\u52a0\uff09\n$formatted = str_replace(', ', ' ', $formatted) . '\u5e74';\n\necho $formatted; \/\/ \u51fa\u529b: \u571f\u66dc\u65e5 7\u6708 15 2023\u5e74\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">\u5b9f\u8df5\u7684\u306a\u56fd\u969b\u5316\u6226\u7565<\/h4>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7dcf\u5408\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u304a\u3059\u3059\u3081\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>PHP Intl\u62e1\u5f35\u304c\u5229\u7528\u53ef\u80fd\u306a\u5834\u5408\u306f\u3001<code>IntlDateFormatter<\/code>\u3092\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li>Intl\u62e1\u5f35\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u56fd\u969b\u5316\u6a5f\u80fd\u3084\u72ec\u81ea\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u5229\u7528\u3059\u308b<\/li>\n\n\n\n<li>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u5074\u3067\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3059\u308b\u5834\u5408\u306f\u3001ISO 8601\u5f62\u5f0f\uff08<code>DateTime::ATOM<\/code>\u306a\u3069\uff09\u3092\u4f7f\u3063\u3066\u30c7\u30fc\u30bf\u3092\u6e21\u3057\u3001JavaScript\u5074\u3067\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u3059\u308b<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\u5e38\u306bUTC\u3067\u6a19\u6e96\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u4fdd\u5b58\u3057\u3001\u8868\u793a\u6642\u306b\u306e\u307f\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u99c6\u4f7f\u3059\u308b\u3053\u3068\u3067\u3001\u3042\u3089\u3086\u308b\u72b6\u6cc1\u306b\u5bfe\u5fdc\u3057\u305f\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u91cd\u8981\u306a\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u51e6\u7406\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u51e6\u7406\u306e\u5b9f\u8df5\u7684\u30a2\u30d7\u30ed\u30fc\u30c1<\/h2>\n\n\n\n<p>\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u969b\u3001\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u51e6\u7406\u306f\u907f\u3051\u3066\u901a\u308c\u306a\u3044\u8ab2\u984c\u3067\u3059\u3002\u7570\u306a\u308b\u5730\u57df\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u540c\u3058\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u65e5\u4ed8\u3068\u6642\u9593\u306e\u8868\u793a\u3084\u4fdd\u5b58\u306b\u304a\u3044\u3066\u3001\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u9069\u5207\u306b\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002PHP\u306eDateTime\u30af\u30e9\u30b9\u3068DateTimeZone\u30af\u30e9\u30b9\u3092\u4f7f\u3048\u3070\u3001\u3053\u308c\u3089\u306e\u8ab2\u984c\u3092\u52b9\u679c\u7684\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u8a2d\u5b9a\u3068\u5909\u63db\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-20\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u57fa\u672c\u6982\u5ff5<\/h4>\n\n\n\n<p>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306f\u3001\u5730\u7403\u4e0a\u306e\u7279\u5b9a\u306e\u5730\u57df\u3067\u4f7f\u7528\u3055\u308c\u308b\u6a19\u6e96\u6642\u9593\u3092\u6307\u3057\u307e\u3059\u3002\u4e16\u754c\u306b\u306f\u7d0440\u306e\u4e3b\u8981\u306a\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u304c\u3042\u308a\u3001\u305d\u308c\u305e\u308cUTC\uff08\u5354\u5b9a\u4e16\u754c\u6642\uff09\u304b\u3089\u306e\u30aa\u30d5\u30bb\u30c3\u30c8\u3067\u8868\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u65e5\u672c\u6a19\u6e96\u6642\uff08JST\uff09\uff1aUTC+9<\/li>\n\n\n\n<li>\u4e2d\u592e\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593\uff08CET\uff09\uff1aUTC+1<\/li>\n\n\n\n<li>\u6771\u90e8\u6a19\u6e96\u6642\uff08EST\uff09\uff1aUTC-5<\/li>\n<\/ul>\n\n\n\n<p>PHP\u3067\u306f\u3001\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u6271\u3046\u305f\u3081\u306bDateTimeZone\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u307e\u3059\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=\"\">\/\/ DateTimeZone\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\n$tokyo_tz = new DateTimeZone('Asia\/Tokyo');     \/\/ \u65e5\u672c\u6a19\u6e96\u6642\n$paris_tz = new DateTimeZone('Europe\/Paris');   \/\/ \u4e2d\u592e\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593\n$ny_tz = new DateTimeZone('America\/New_York');  \/\/ \u6771\u90e8\u6a19\u6e96\u6642\n$utc_tz = new DateTimeZone('UTC');              \/\/ \u5354\u5b9a\u4e16\u754c\u6642\n<\/pre>\n\n\n\n<p>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8b58\u5225\u5b50\u306f\u3001\u2019\u5730\u57df\/\u90fd\u5e02\u2019\u306e\u5f62\u5f0f\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002PHP\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u5b8c\u5168\u306a\u30ea\u30b9\u30c8\u306f\u3001<code>DateTimeZone::listIdentifiers()<\/code>\u30e1\u30bd\u30c3\u30c9\u3067\u53d6\u5f97\u3067\u304d\u307e\u3059\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=\"\">\/\/ \u5229\u7528\u53ef\u80fd\u306a\u3059\u3079\u3066\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u53d6\u5f97\n$all_timezones = DateTimeZone::listIdentifiers();\n\n\/\/ \u7279\u5b9a\u306e\u5730\u57df\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u307f\u3092\u53d6\u5f97\n$asia_timezones = DateTimeZone::listIdentifiers(DateTimeZone::ASIA);\n$europe_timezones = DateTimeZone::listIdentifiers(DateTimeZone::EUROPE);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p>PHP\u30b9\u30af\u30ea\u30d7\u30c8\u5185\u3067\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f<code>date.timezone<\/code>\u8a2d\u5b9a\u307e\u305f\u306f\u30b3\u30fc\u30c9\u5185\u3067\u8a2d\u5b9a\u3067\u304d\u307e\u3059\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=\"\">\/\/ php.ini\u3067\u306e\u8a2d\u5b9a\u65b9\u6cd5\n\/\/ date.timezone = 'Asia\/Tokyo'\n\n\/\/ \u30b3\u30fc\u30c9\u5185\u3067\u306e\u8a2d\u5b9a\u65b9\u6cd5\ndate_default_timezone_set('Asia\/Tokyo');\n\n\/\/ \u73fe\u5728\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u78ba\u8a8d\n$current_default = date_default_timezone_get();\necho $current_default; \/\/ \u51fa\u529b: Asia\/Tokyo\n<\/pre>\n\n\n\n<p>\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u3057\u3066\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5\u6642\u306b\u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u660e\u793a\u7684\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u591a\u304f\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u3053\u308c\u3092\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-22\">DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a<\/h4>\n\n\n\n<p>DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u4f5c\u6210\u6642\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u6307\u5b9a\u3059\u308b\u306b\u306f\u3001\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u7b2c2\u5f15\u6570\u3092\u4f7f\u7528\u3057\u307e\u3059\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=\"\">\/\/ \u6771\u4eac\u6642\u9593\u3067DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n$tokyo_time = new DateTime('now', new DateTimeZone('Asia\/Tokyo'));\necho $tokyo_time-&gt;format('Y-m-d H:i:s P'); \/\/ \u4f8b: 2023-07-15 23:30:45 +09:00\n\n\/\/ \u30cb\u30e5\u30fc\u30e8\u30fc\u30af\u6642\u9593\u3067DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n$ny_time = new DateTime('now', new DateTimeZone('America\/New_York'));\necho $ny_time-&gt;format('Y-m-d H:i:s P'); \/\/ \u4f8b: 2023-07-15 10:30:45 -04:00\n<\/pre>\n\n\n\n<p>\u65e2\u5b58\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u5909\u66f4\u3059\u308b\u306b\u306f\u3001<code>setTimezone()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\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=\"\">\/\/ UTC\u6642\u9593\u3067DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n$utc_time = new DateTime('2023-07-15 14:30:45', new DateTimeZone('UTC'));\necho $utc_time-&gt;format('Y-m-d H:i:s P'); \/\/ \u51fa\u529b: 2023-07-15 14:30:45 +00:00\n\n\/\/ \u6771\u4eac\u6642\u9593\u306b\u5909\u63db\n$utc_time-&gt;setTimezone(new DateTimeZone('Asia\/Tokyo'));\necho $utc_time-&gt;format('Y-m-d H:i:s P'); \/\/ \u51fa\u529b: 2023-07-15 23:30:45 +09:00\n\n\/\/ \u30d1\u30ea\u6642\u9593\u306b\u5909\u63db\n$utc_time-&gt;setTimezone(new DateTimeZone('Europe\/Paris'));\necho $utc_time-&gt;format('Y-m-d H:i:s P'); \/\/ \u51fa\u529b: 2023-07-15 16:30:45 +02:00\n<\/pre>\n\n\n\n<p>\u91cd\u8981\u306a\u306e\u306f\u3001<code>setTimezone()<\/code>\u306f\u5185\u90e8\u7684\u306a\u6642\u9593\u5024\u306f\u5909\u66f4\u305b\u305a\u3001\u8868\u793a\u3059\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u307f\u3092\u5909\u66f4\u3059\u308b\u70b9\u3067\u3059\u3002\u3064\u307e\u308a\u3001\u540c\u3058\u77ac\u9593\u3092\u7570\u306a\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3067\u8868\u73fe\u3067\u304d\u308b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u9593\u306e\u6642\u5dee\u8a08\u7b97<\/h4>\n\n\n\n<p>2\u3064\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u9593\u306e\u6642\u5dee\u3092\u8a08\u7b97\u3059\u308b\u306b\u306f\u3001DateTimeZone\u30af\u30e9\u30b9\u306e<code>getOffset()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\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\u6642\u523b\u306b\u304a\u3051\u308bUTC\u3068\u6771\u4eac\u306e\u6642\u5dee\uff08\u79d2\uff09\u3092\u8a08\u7b97\n$utc_tz = new DateTimeZone('UTC');\n$tokyo_tz = new DateTimeZone('Asia\/Tokyo');\n\n$now = new DateTime('now', $utc_tz);\n$offset = $tokyo_tz-&gt;getOffset($now);\n\necho \"UTC\u3068\u6771\u4eac\u306e\u6642\u5dee\u306f \" . ($offset \/ 3600) . \" \u6642\u9593\u3067\u3059\u3002\"; \/\/ \u51fa\u529b: UTC\u3068\u6771\u4eac\u306e\u6642\u5dee\u306f 9 \u6642\u9593\u3067\u3059\u3002\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u56fd\u969b\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u56fd\u969b\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u9069\u5207\u306b\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u3044\u304f\u3064\u304b\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">1. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\u5e38\u306bUTC\u3067\u4fdd\u5b58\u3059\u308b<\/h4>\n\n\n\n<p>\u30c7\u30fc\u30bf\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3059\u308b\u969b\u306f\u3001\u5e38\u306bUTC\uff08\u5354\u5b9a\u4e16\u754c\u6642\uff09\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u306e\u4e00\u8cab\u6027\u304c\u4fdd\u305f\u308c\u308b<\/li>\n\n\n\n<li>\u590f\u6642\u9593\u306e\u5207\u308a\u66ff\u3048\u306b\u3088\u308b\u554f\u984c\u304c\u767a\u751f\u3057\u306a\u3044<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u9593\u3067\u30c7\u30fc\u30bf\u3092\u540c\u671f\u3057\u3084\u3059\u304f\u306a\u308b<\/li>\n\n\n\n<li>\u8a08\u7b97\u3084\u30bd\u30fc\u30c8\u304c\u5358\u7d14\u5316\u3055\u308c\u308b<\/li>\n<\/ul>\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=\"\">\/\/ \u30d5\u30a9\u30fc\u30e0\u304b\u3089\u9001\u4fe1\u3055\u308c\u305f\u73fe\u5730\u6642\u9593\u3092UTC\u306b\u5909\u63db\u3057\u3066\u304b\u3089\u4fdd\u5b58\n$local_time = new DateTime(\n    $_POST['event_datetime'],\n    new DateTimeZone($_POST['user_timezone'])\n);\n$local_time-&gt;setTimezone(new DateTimeZone('UTC'));\n\n\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3059\u308bUTC\u6642\u9593\n$utc_datetime = $local_time-&gt;format('Y-m-d H:i:s');\n\n\/\/ SQL\u30af\u30a8\u30ea\u306e\u4f8b\n$query = \"INSERT INTO events (title, datetime_utc) VALUES (?, ?)\";\n$stmt = $pdo-&gt;prepare($query);\n$stmt-&gt;execute([$_POST['title'], $utc_datetime]);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">2. \u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3059\u308b<\/h4>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u3001\u8868\u793a\u6642\u306b\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5404\u30e6\u30fc\u30b6\u30fc\u306b\u9069\u3057\u305f\u6642\u9593\u8868\u793a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\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=\"\">\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u307e\u305f\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u53d6\u5f97\n$user_timezone = $_SESSION['user_timezone'] ?? 'UTC';\n\n\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089UTC\u6642\u9593\u3092\u53d6\u5f97\n$query = \"SELECT * FROM events WHERE id = ?\";\n$stmt = $pdo-&gt;prepare($query);\n$stmt-&gt;execute([$event_id]);\n$event = $stmt-&gt;fetch();\n\n\/\/ UIC\u6642\u9593\u3092\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5909\u63db\n$utc_time = new DateTime($event['datetime_utc'], new DateTimeZone('UTC'));\n$utc_time-&gt;setTimezone(new DateTimeZone($user_timezone));\n\n\/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3067\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n$local_datetime = $utc_time-&gt;format('Y-m-d H:i:s');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-27\">3. \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u691c\u51fa\u306e\u81ea\u52d5\u5316<\/h4>\n\n\n\n<p>\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u81ea\u52d5\u7684\u306b\u691c\u51fa\u3059\u308b\u305f\u3081\u306b\u3001JavaScript\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\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=\"\">\/\/ \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u306eJavaScript\u3067\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u691c\u51fa\nconst timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n\/\/ \u30d5\u30a9\u30fc\u30e0\u306e\u96a0\u3057\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u8a2d\u5b9a\ndocument.getElementById('user_timezone').value = timezone;\n\n\/\/ \u307e\u305f\u306f\u3001AJAX\u3067\u30b5\u30fc\u30d0\u30fc\u306b\u9001\u4fe1\nfetch('\/set-timezone', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application\/json' },\n    body: JSON.stringify({ timezone: timezone })\n});\n<\/pre>\n\n\n\n<p>PHP\u3067\u3053\u306e\u60c5\u5831\u3092\u53d7\u3051\u53d6\u308a\u3001\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a\u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\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=\"\">\/\/ AJAX\u30ea\u30af\u30a8\u30b9\u30c8\u304b\u3089\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u53d6\u5f97\n$data = json_decode(file_get_contents('php:\/\/input'), true);\n$timezone = $data['timezone'] ?? 'UTC';\n\n\/\/ \u6709\u52b9\u306a\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u304b\u3069\u3046\u304b\u3092\u691c\u8a3c\nif (in_array($timezone, DateTimeZone::listIdentifiers())) {\n    $_SESSION['user_timezone'] = $timezone;\n    \/\/ \u307e\u305f\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58...\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-28\">4. \u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u65e5\u6642\u306e\u8868\u793a\u30d1\u30bf\u30fc\u30f3<\/h4>\n\n\n\n<p>\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8868\u793a\u30d1\u30bf\u30fc\u30f3\u304c\u52b9\u679c\u7684\u3067\u3059\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=\"\">$datetime = new DateTime('2023-07-15 14:30:45', new DateTimeZone('UTC'));\n$datetime-&gt;setTimezone(new DateTimeZone($user_timezone));\n\n\/\/ \u76f8\u5bfe\u7684\u306a\u6642\u9593\u8868\u793a\uff08\u300c3\u6642\u9593\u524d\u300d\u306a\u3069\uff09\n$now = new DateTime('now', new DateTimeZone('UTC'));\n$interval = $now-&gt;diff($datetime);\n\nif ($interval-&gt;days == 0) {\n    if ($interval-&gt;h == 0) {\n        if ($interval-&gt;i == 0) {\n            $relative_time = '\u305f\u3063\u305f\u4eca';\n        } else {\n            $relative_time = $interval-&gt;i . '\u5206\u524d';\n        }\n    } else {\n        $relative_time = $interval-&gt;h . '\u6642\u9593\u524d';\n    }\n} else if ($interval-&gt;days == 1) {\n    $relative_time = '\u6628\u65e5';\n} else if ($interval-&gt;days &lt; 7) {\n    $relative_time = $interval-&gt;days . '\u65e5\u524d';\n} else {\n    \/\/ \u7d76\u5bfe\u7684\u306a\u65e5\u6642\u8868\u793a\n    $relative_time = $datetime-&gt;format('Y\u5e74m\u6708d\u65e5 H:i');\n}\n\n\/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u60c5\u5831\u3092\u542b\u3080\u5b8c\u5168\u306a\u65e5\u6642\u8868\u793a\n$full_datetime = $datetime-&gt;format('Y-m-d H:i:s T');\n\n\/\/ \u30c4\u30fc\u30eb\u30c1\u30c3\u30d7\u306a\u3069\u3067\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u60c5\u5831\u3092\u8868\u793a\necho '&lt;span title=\"' . $full_datetime . '\"&gt;' . $relative_time . '&lt;\/span&gt;';\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">5. \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u30bb\u30ec\u30af\u30c8\u30dc\u30c3\u30af\u30b9\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u9078\u629e\u3055\u305b\u308b\u5834\u5408\u3001\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u5b8c\u5168\u306a\u30ea\u30b9\u30c8\u306f\u591a\u3059\u304e\u308b\u305f\u3081\u3001\u4e00\u822c\u7684\u306a\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3066\u8868\u793a\u3059\u308b\u3068\u3088\u3044\u3067\u3057\u3087\u3046\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=\"\">\/\/ \u3088\u304f\u4f7f\u308f\u308c\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u30de\u30c3\u30d4\u30f3\u30b0\n$common_timezones = [\n    'UTC' =&gt; 'UTC (\u5354\u5b9a\u4e16\u754c\u6642)',\n    'Asia\/Tokyo' =&gt; '\u65e5\u672c\u6a19\u6e96\u6642 (UTC+9)',\n    'Asia\/Shanghai' =&gt; '\u4e2d\u56fd\u6a19\u6e96\u6642 (UTC+8)',\n    'Europe\/London' =&gt; '\u30a4\u30ae\u30ea\u30b9\u6642\u9593 (UTC+0\/+1)',\n    'Europe\/Paris' =&gt; '\u4e2d\u592e\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 (UTC+1\/+2)',\n    'America\/New_York' =&gt; '\u7c73\u56fd\u6771\u90e8\u6642\u9593 (UTC-5\/-4)',\n    'America\/Los_Angeles' =&gt; '\u7c73\u56fd\u592a\u5e73\u6d0b\u6642\u9593 (UTC-8\/-7)',\n    \/\/ ...\n];\n\n\/\/ \u30bb\u30ec\u30af\u30c8\u30dc\u30c3\u30af\u30b9\u306e\u751f\u6210\necho '&lt;select name=\"timezone\"&gt;';\nforeach ($common_timezones as $tz_id =&gt; $tz_name) {\n    $selected = ($tz_id == $user_timezone) ? 'selected' : '';\n    echo '&lt;option value=\"' . $tz_id . '\" ' . $selected . '&gt;' . $tz_name . '&lt;\/option&gt;';\n}\necho '&lt;\/select&gt;';\n<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3051\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u51e6\u7406\u306e\u591a\u304f\u306e\u8ab2\u984c\u3092\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u65e5\u4ed8\u306e\u8a08\u7b97\u3068\u64cd\u4f5c\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-30\">\u65e5\u4ed8\u306e\u8a08\u7b97\u3068\u64cd\u4f5c<\/h2>\n\n\n\n<p>\u65e5\u4ed8\u3068\u6642\u9593\u306b\u95a2\u3059\u308b\u8a08\u7b97\u306f\u3001\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3001\u5951\u7d04\u7ba1\u7406\u3001\u30a4\u30d9\u30f3\u30c8\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3001\u8ab2\u91d1\u51e6\u7406\u306a\u3069\u3001\u591a\u304f\u306e\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u4e2d\u5fc3\u3068\u306a\u308b\u64cd\u4f5c\u3067\u3059\u3002PHP\u306eDateTime\u30af\u30e9\u30b9\u306f\u3001\u65e5\u4ed8\u306e\u52a0\u7b97\u30fb\u6e1b\u7b97\u3001\u671f\u9593\u8a08\u7b97\u3001\u6bd4\u8f03\u306a\u3069\u3001\u3055\u307e\u3056\u307e\u306a\u65e5\u4ed8\u64cd\u4f5c\u3092\u7c21\u5358\u304b\u3064\u6b63\u78ba\u306b\u884c\u3046\u305f\u3081\u306e\u8c4a\u5bcc\u306a\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-31\">\u65e5\u4ed8\u306e\u52a0\u7b97\u3068\u6e1b\u7b97\u3092\u884c\u3046\u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u65b9\u6cd5<\/h3>\n\n\n\n<p>DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u65e5\u4ed8\u3084\u6642\u9593\u3092\u52a0\u7b97\u30fb\u6e1b\u7b97\u3059\u308b\u306b\u306f\u3001\u4e3b\u306b\u4ee5\u4e0b\u306e3\u3064\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>modify()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/li>\n\n\n\n<li><code>add()<\/code>\u304a\u3088\u3073<code>sub()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/li>\n\n\n\n<li>\u76f4\u63a5\u65e5\u4ed8\u30fb\u6642\u9593\u306e\u5404\u90e8\u5206\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5<\/li>\n<\/ol>\n\n\n\n<p>\u305d\u308c\u305e\u308c\u306e\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-32\">1. modify()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/h4>\n\n\n\n<p><code>modify()<\/code>\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u81ea\u7136\u8a00\u8a9e\u306b\u8fd1\u3044\u5f62\u5f0f\u3067\u65e5\u4ed8\u306e\u5909\u66f4\u3092\u884c\u3048\u308b\u4fbf\u5229\u306a\u30e1\u30bd\u30c3\u30c9\u3067\u3059\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=\"\">$date = new DateTime('2023-07-15');\n\n\/\/ \u65e5\u306e\u52a0\u7b97\n$date-&gt;modify('+1 day');\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-07-16\n\n\/\/ \u6708\u306e\u52a0\u7b97\n$date-&gt;modify('+1 month');\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-08-16\n\n\/\/ \u5e74\u306e\u52a0\u7b97\n$date-&gt;modify('+1 year');\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2024-08-16\n\n\/\/ \u6642\u9593\u306e\u52a0\u7b97\n$date-&gt;modify('+2 hours');\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u51fa\u529b: 2024-08-16 02:00:00\n\n\/\/ \u8907\u5408\u7684\u306a\u52a0\u7b97\n$date-&gt;modify('+3 days 4 hours 30 minutes');\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u51fa\u529b: 2024-08-19 06:30:00\n\n\/\/ \u6e1b\u7b97\u3082\u540c\u69d8\u306b\u884c\u3048\u308b\n$date-&gt;modify('-2 weeks');\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2024-08-05\n<\/pre>\n\n\n\n<p><code>modify()<\/code>\u30e1\u30bd\u30c3\u30c9\u306f\u67d4\u8edf\u3067\u76f4\u611f\u7684\u3067\u3059\u304c\u3001\u7279\u5b9a\u306e\u65e5\u4ed8\u8a08\u7b97\u3067\u306f\u4e88\u671f\u3057\u306a\u3044\u7d50\u679c\u306b\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u6708\u672b\u3092\u8d85\u3048\u308b\u65e5\u4ed8\u306e\u8a08\u7b97\u306a\u3069\u3067\u3059\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=\"\">$date = new DateTime('2023-01-31'); \/\/ 1\u670831\u65e5\n\n\/\/ 1\u30f6\u6708\u5f8c - \u6ce8\u610f\u304c\u5fc5\u8981\u306a\u4f8b\n$date-&gt;modify('+1 month');\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-03-03 (2\u6708\u306f28\u65e5\u307e\u3067)\n<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u306f\u3001\u6b21\u306b\u8aac\u660e\u3059\u308b<code>add()<\/code>\u3084<code>sub()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u307b\u3046\u304c\u9069\u5207\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">2. add()\u304a\u3088\u3073sub()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/h4>\n\n\n\n<p><code>add()<\/code>\u3068<code>sub()<\/code>\u30e1\u30bd\u30c3\u30c9\u306f\u3001<code>DateInterval<\/code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u3063\u3066\u65e5\u4ed8\u3092\u52a0\u7b97\u30fb\u6e1b\u7b97\u3057\u307e\u3059\u3002\u3088\u308a\u7cbe\u5bc6\u306a\u5236\u5fa1\u304c\u53ef\u80fd\u3067\u3001\u671f\u9593\u6307\u5b9a\u306e\u69cb\u6587\u3082\u660e\u78ba\u3067\u3059\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=\"\">$date = new DateTime('2023-07-15');\n\n\/\/ 5\u65e5\u9593\u52a0\u7b97\n$date-&gt;add(new DateInterval('P5D'));\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-07-20\n\n\/\/ 2\u30f6\u6708\u306810\u65e5\u52a0\u7b97\n$date-&gt;add(new DateInterval('P2M10D'));\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-09-30\n\n\/\/ 1\u5e74\u30012\u30f6\u6708\u30013\u65e5\u30014\u6642\u9593\u30015\u5206\u30016\u79d2\u3092\u52a0\u7b97\n$date-&gt;add(new DateInterval('P1Y2M3DT4H5M6S'));\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u51fa\u529b: 2024-12-03 04:05:06\n\n\/\/ \u6e1b\u7b97\u3082\u540c\u69d8\u306b\u884c\u3048\u308b\n$date-&gt;sub(new DateInterval('P1M'));\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2024-11-03\n<\/pre>\n\n\n\n<p>DateInterval\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6307\u5b9a\u306f\u3001ISO 8601\u671f\u9593\u5f62\u5f0f\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>P<\/code>\u304b\u3089\u59cb\u307e\u308a\u3001\u65e5\u4ed8\u90e8\u5206\u3092\u8868\u3057\u307e\u3059<\/li>\n\n\n\n<li><code>T<\/code>\u306f\u6642\u9593\u90e8\u5206\u306e\u958b\u59cb\u3092\u793a\u3057\u307e\u3059<\/li>\n\n\n\n<li>\u5404\u6570\u5024\u306e\u5f8c\u306b\u5358\u4f4d\u3092\u8868\u3059\u6587\u5b57\u304c\u7d9a\u304d\u307e\u3059\uff1a\n<ul class=\"wp-block-list\">\n<li><code>Y<\/code>: \u5e74<\/li>\n\n\n\n<li><code>M<\/code>: \u6708\uff08\u65e5\u4ed8\u90e8\u5206\u306e\u5834\u5408\uff09<\/li>\n\n\n\n<li><code>D<\/code>: \u65e5<\/li>\n\n\n\n<li><code>H<\/code>: \u6642<\/li>\n\n\n\n<li><code>M<\/code>: \u5206\uff08\u6642\u9593\u90e8\u5206\u306e\u5834\u5408\uff09<\/li>\n\n\n\n<li><code>S<\/code>: \u79d2<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u307e\u305f\u3001<code>DateInterval<\/code>\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u306f\u8ca0\u306e\u5024\u3092\u6307\u5b9a\u3067\u304d\u307e\u305b\u3093\u304c\u3001<code>invert<\/code>\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4f7f\u7528\u3057\u3066\u671f\u9593\u3092\u53cd\u8ee2\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\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=\"\">$interval = new DateInterval('P1M');\n$interval-&gt;invert = 1; \/\/ \u671f\u9593\u3092\u53cd\u8ee2\uff08\u52a0\u7b97\u3067\u306f\u306a\u304f\u6e1b\u7b97\u306b\uff09\n\n$date = new DateTime('2023-07-15');\n$date-&gt;add($interval); \/\/ \u5b9f\u969b\u306b\u306f1\u30f6\u6708\u6e1b\u7b97\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-06-15\n\n\/\/ createFromDateString\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u3066\u9593\u9694\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\n$interval = DateInterval::createFromDateString('2 weeks');\n$date-&gt;add($interval);\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-06-29\n\n#### 3. \u76f4\u63a5\u65e5\u4ed8\u30fb\u6642\u9593\u306e\u5404\u90e8\u5206\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\n\n\u7279\u5b9a\u306e\u65e5\u4ed8\u3084\u6642\u9593\u306e\u90e8\u5206\u3060\u3051\u3092\u5909\u66f4\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u5c02\u7528\u306esetter\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\uff1a\n\n```php\n$date = new DateTime('2023-07-15 14:30:45');\n\n\/\/ \u5e74\u3092\u5909\u66f4\n$date-&gt;setDate(2024, 1, 1);\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u51fa\u529b: 2024-01-01 14:30:45\n\n\/\/ \u6642\u9593\u3092\u5909\u66f4\n$date-&gt;setTime(9, 0, 0);\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u51fa\u529b: 2024-01-01 09:00:00\n\n\/\/ \u65e5\u4ed8\u306e\u7279\u5b9a\u306e\u90e8\u5206\u3060\u3051\u3092\u5909\u66f4\n$date-&gt;setTime(10, 20, 30);        \/\/ \u6642\u3001\u5206\u3001\u79d2\u3092\u8a2d\u5b9a\necho $date-&gt;format('H:i:s'); \/\/ \u51fa\u529b: 10:20:30\n\n\/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u76f4\u63a5\u8a2d\u5b9a\n$date-&gt;setTimestamp(1609459200);   \/\/ 2021-01-01 00:00:00 (UTC)\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u51fa\u529b: 2021-01-01 00:00:00\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-34\">DateInterval\u3092\u6d3b\u7528\u3057\u305f\u67d4\u8edf\u306a\u671f\u9593\u8a08\u7b97<\/h3>\n\n\n\n<p>DateInterval\u30af\u30e9\u30b9\u306f\u5358\u306b\u65e5\u4ed8\u306e\u52a0\u7b97\u30fb\u6e1b\u7b97\u3060\u3051\u3067\u306a\u304f\u3001\u671f\u9593\u81ea\u4f53\u3092\u8868\u73fe\u30fb\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">\u671f\u9593\u306e\u4f5c\u6210\u3068\u64cd\u4f5c<\/h4>\n\n\n\n<p>DateInterval\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f\u8907\u6570\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\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=\"\">\/\/ ISO 8601\u5f62\u5f0f\u306e\u671f\u9593\u6587\u5b57\u5217\u304b\u3089\u4f5c\u6210\n$interval1 = new DateInterval('P1Y2M3DT4H5M6S');\n\n\/\/ createFromDateString\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\n$interval2 = DateInterval::createFromDateString('1 year 2 months 3 days 4 hours 5 minutes 6 seconds');\n\n\/\/ 2\u3064\u306e\u65e5\u4ed8\u306e\u5dee\u304b\u3089\u4f5c\u6210\n$date1 = new DateTime('2023-01-01');\n$date2 = new DateTime('2024-03-15');\n$interval3 = $date1-&gt;diff($date2);\n<\/pre>\n\n\n\n<p>\u4f5c\u6210\u3057\u305fDateInterval\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u3001\u69d8\u3005\u306a\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u6301\u3063\u3066\u3044\u307e\u3059\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=\"\">$date1 = new DateTime('2022-03-15');\n$date2 = new DateTime('2023-07-30');\n$interval = $date1-&gt;diff($date2);\n\necho \"\u5e74: \" . $interval-&gt;y . \"\\n\";   \/\/ \u51fa\u529b: \u5e74: 1\necho \"\u6708: \" . $interval-&gt;m . \"\\n\";   \/\/ \u51fa\u529b: \u6708: 4\necho \"\u65e5: \" . $interval-&gt;d . \"\\n\";   \/\/ \u51fa\u529b: \u65e5: 15\necho \"\u6642: \" . $interval-&gt;h . \"\\n\";   \/\/ \u51fa\u529b: \u6642: 0\necho \"\u5206: \" . $interval-&gt;i . \"\\n\";   \/\/ \u51fa\u529b: \u5206: 0\necho \"\u79d2: \" . $interval-&gt;s . \"\\n\";   \/\/ \u51fa\u529b: \u79d2: 0\n\n\/\/ \u5408\u8a08\u65e5\u6570\necho \"\u5408\u8a08\u65e5\u6570: \" . $interval-&gt;days . \"\\n\"; \/\/ \u51fa\u529b: \u5408\u8a08\u65e5\u6570: 502\n\n\/\/ \u6b63\u8ca0\u306e\u5224\u5b9a\necho \"\u8ca0\u306e\u671f\u9593\u304b: \" . ($interval-&gt;invert ? '\u306f\u3044' : '\u3044\u3044\u3048') . \"\\n\"; \/\/ \u51fa\u529b: \u8ca0\u306e\u671f\u9593\u304b: \u3044\u3044\u3048\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">\u671f\u9593\u3092\u6587\u5b57\u5217\u3067\u8868\u73fe<\/h4>\n\n\n\n<p>DateInterval\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6587\u5b57\u5217\u3068\u3057\u3066\u8868\u793a\u3059\u308b\u306b\u306f\u3001<code>format()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\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=\"\">$interval = new DateInterval('P1Y2M3DT4H5M6S');\n\n\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $interval-&gt;format('%R%y\u5e74%m\u6708%d\u65e5 %h\u6642\u9593%i\u5206%s\u79d2'); \/\/ \u51fa\u529b: +1\u5e742\u67083\u65e5 4\u6642\u95935\u52066\u79d2\n\n\/\/ \u5408\u8a08\u65e5\u6570\u3092\u542b\u3081\u305f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $interval-&gt;format('\u5408\u8a08%a\u65e5\u306e\u3046\u3061\u3001%y\u5e74%m\u6708%d\u65e5'); \/\/ \u51fa\u529b: \u5408\u8a08428\u65e5\u306e\u3046\u3061\u30011\u5e742\u67083\u65e5\n<\/pre>\n\n\n\n<p>\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6587\u5b57\u5217\u3067\u4f7f\u7528\u3067\u304d\u308b\u4e3b\u306a\u6307\u5b9a\u5b50\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-827bc8ea-83d8-453c-9abe-067e1995c4ff\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6307\u5b9a\u5b50<\/th><th>\u8aac\u660e<\/th><\/tr><\/thead><tbody><tr><td>%y<\/td><td>\u5e74<\/td><\/tr><tr><td>%m<\/td><td>\u6708<\/td><\/tr><tr><td>%d<\/td><td>\u65e5<\/td><\/tr><tr><td>%h<\/td><td>\u6642<\/td><\/tr><tr><td>%i<\/td><td>\u5206<\/td><\/tr><tr><td>%s<\/td><td>\u79d2<\/td><\/tr><tr><td>%a<\/td><td>\u5408\u8a08\u65e5\u6570<\/td><\/tr><tr><td>%R<\/td><td>\u671f\u9593\u306e\u7b26\u53f7\uff08+\u307e\u305f\u306f-\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-37\">\u671f\u9593\u306e\u500d\u6570\u8a08\u7b97<\/h4>\n\n\n\n<p>DateInterval\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u500d\u6570\u3092\u8a08\u7b97\u3059\u308b\u65b9\u6cd5\u306f\u6a19\u6e96\u3067\u306f\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c\u3001PHP 8.0\u4ee5\u964d\u3067\u306f<code>createFromDateString()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u3066\u7c21\u5358\u306b\u5b9f\u73fe\u3067\u304d\u307e\u3059\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=\"\">\/\/ PHP 8.0\u4ee5\u964d\u3067\u306e\u671f\u9593\u306e\u500d\u6570\u8a08\u7b97\n$interval = DateInterval::createFromDateString('3 days');\n\n$date = new DateTime('2023-07-15');\n$date-&gt;add($interval); \/\/ 3\u65e5\u52a0\u7b97\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-07-18\n\n\/\/ \u540c\u3058\u671f\u9593\u3092\u3055\u3089\u306b\u52a0\u7b97\n$date-&gt;add($interval); \/\/ \u3055\u3089\u306b3\u65e5\u52a0\u7b97\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-07-21\n<\/pre>\n\n\n\n<p>PHP 8.0\u3088\u308a\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306f\u3001\u671f\u9593\u306e\u500d\u6570\u8a08\u7b97\u3092\u884c\u3046\u306b\u306f\u30ab\u30b9\u30bf\u30e0\u95a2\u6570\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\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=\"\">\/\/ PHP 8.0\u3088\u308a\u524d\u3067\u306e\u671f\u9593\u306e\u500d\u6570\u8a08\u7b97\u306e\u4f8b\nfunction multiplyInterval(DateInterval $interval, $multiplier) {\n    $result = new DateInterval('PT0S'); \/\/ 0\u79d2\u306e\u671f\u9593\n    foreach (['y', 'm', 'd', 'h', 'i', 's'] as $prop) {\n        $result-&gt;$prop = $interval-&gt;$prop * $multiplier;\n    }\n    return $result;\n}\n\n$interval = new DateInterval('P2D'); \/\/ 2\u65e5\n$twoWeeks = multiplyInterval($interval, 7); \/\/ 14\u65e5\uff082\u65e5\u00d77\uff09\n\n$date = new DateTime('2023-07-15');\n$date-&gt;add($twoWeeks);\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-07-29\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-38\">\u65e5\u4ed8\u6bd4\u8f03\u3068\u7bc4\u56f2\u30c1\u30a7\u30c3\u30af\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u65e5\u4ed8\u306e\u6bd4\u8f03\u3084\u7bc4\u56f2\u30c1\u30a7\u30c3\u30af\u306f\u3001\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3084\u6709\u52b9\u671f\u9650\u306e\u691c\u8a3c\u306a\u3069\u3001\u591a\u304f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5fc5\u8981\u306a\u64cd\u4f5c\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">\u57fa\u672c\u7684\u306a\u65e5\u4ed8\u6bd4\u8f03<\/h4>\n\n\n\n<p>DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u6bd4\u8f03\u306b\u306f\u3001PHP\u6a19\u6e96\u306e\u6bd4\u8f03\u6f14\u7b97\u5b50\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\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=\"\">$date1 = new DateTime('2023-07-15');\n$date2 = new DateTime('2023-08-20');\n$date3 = new DateTime('2023-07-15');\n\n\/\/ \u7b49\u4fa1\u6bd4\u8f03\nif ($date1 == $date3) {\n    echo \"date1\u3068date3\u306f\u540c\u3058\u65e5\u4ed8\u3067\u3059\u3002\\n\"; \/\/ \u8868\u793a\u3055\u308c\u308b\n}\n\n\/\/ \u540c\u4e00\u6027\u6bd4\u8f03\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8ID\u306e\u6bd4\u8f03\uff09\nif ($date1 === $date3) {\n    echo \"date1\u3068date3\u306f\u540c\u3058\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3059\u3002\\n\"; \/\/ \u8868\u793a\u3055\u308c\u306a\u3044\n}\n\n\/\/ \u5927\u5c0f\u6bd4\u8f03\nif ($date1 &lt; $date2) {\n    echo \"date1\u306fdate2\u3088\u308a\u524d\u306e\u65e5\u4ed8\u3067\u3059\u3002\\n\"; \/\/ \u8868\u793a\u3055\u308c\u308b\n}\n\n\/\/ \u4e0d\u7b49\u4fa1\u6bd4\u8f03\nif ($date1 != $date2) {\n    echo \"date1\u3068date2\u306f\u7570\u306a\u308b\u65e5\u4ed8\u3067\u3059\u3002\\n\"; \/\/ \u8868\u793a\u3055\u308c\u308b\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">diff()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u305f\u65e5\u4ed8\u306e\u5dee\u5206\u8a08\u7b97<\/h4>\n\n\n\n<p>2\u3064\u306e\u65e5\u4ed8\u306e\u5dee\u3092\u8a08\u7b97\u3059\u308b\u306b\u306f\u3001<code>diff()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\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=\"\">$date1 = new DateTime('2023-01-01');\n$date2 = new DateTime('2023-12-31');\n\n$interval = $date1-&gt;diff($date2);\necho \"\u5dee: {$interval-&gt;days}\u65e5\\n\"; \/\/ \u51fa\u529b: \u5dee: 364\u65e5\n\n\/\/ \u7d76\u5bfe\u5024\u3067\u306f\u306a\u304f\u65b9\u5411\u6027\u306e\u3042\u308b\u5dee\u5206\u304c\u5fc5\u8981\u306a\u5834\u5408\n$interval = $date1-&gt;diff($date2, false);\nif ($interval-&gt;invert) {\n    echo \"date1\u306fdate2\u3088\u308a\u3082 {$interval-&gt;days}\u65e5\u5f8c\u3067\u3059\u3002\\n\";\n} else {\n    echo \"date1\u306fdate2\u3088\u308a\u3082 {$interval-&gt;days}\u65e5\u524d\u3067\u3059\u3002\\n\"; \/\/ \u8868\u793a\u3055\u308c\u308b\n}\n\n\/\/ \u5e74\u6708\u65e5\u306e\u5dee\u3092\u8a73\u7d30\u306b\u53d6\u5f97\necho \"\u5dee: {$interval-&gt;y}\u5e74 {$interval-&gt;m}\u6708 {$interval-&gt;d}\u65e5\\n\"; \/\/ \u51fa\u529b: \u5dee: 0\u5e74 11\u6708 30\u65e5\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">\u7279\u5b9a\u306e\u671f\u9593\u5185\u304b\u3069\u3046\u304b\u306e\u30c1\u30a7\u30c3\u30af<\/h4>\n\n\n\n<p>\u65e5\u4ed8\u304c\u7279\u5b9a\u306e\u671f\u9593\u5185\u306b\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3059\u308b\u65b9\u6cd5\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=\"\">function isDateBetween(DateTime $date, DateTime $start, DateTime $end) {\n    return $date &gt;= $start &amp;&amp; $date &lt;= $end;\n}\n\n$date = new DateTime('2023-07-15');\n$start = new DateTime('2023-06-01');\n$end = new DateTime('2023-08-31');\n\nif (isDateBetween($date, $start, $end)) {\n    echo \"\u6307\u5b9a\u3055\u308c\u305f\u65e5\u4ed8\u306f\u671f\u9593\u5185\u3067\u3059\u3002\\n\"; \/\/ \u8868\u793a\u3055\u308c\u308b\n} else {\n    echo \"\u6307\u5b9a\u3055\u308c\u305f\u65e5\u4ed8\u306f\u671f\u9593\u5916\u3067\u3059\u3002\\n\";\n}\n\n\/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u4f7f\u3063\u305f\u6bd4\u8f03\u3082\u53ef\u80fd\uff08\u30de\u30a4\u30af\u30ed\u79d2\u3092\u542b\u307e\u306a\u3044\u5834\u5408\uff09\n$date_ts = $date-&gt;getTimestamp();\n$start_ts = $start-&gt;getTimestamp();\n$end_ts = $end-&gt;getTimestamp();\n\nif ($date_ts &gt;= $start_ts &amp;&amp; $date_ts &lt;= $end_ts) {\n    echo \"\u6307\u5b9a\u3055\u308c\u305f\u65e5\u4ed8\u306f\u671f\u9593\u5185\u3067\u3059\uff08\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u6bd4\u8f03\uff09\u3002\\n\"; \/\/ \u8868\u793a\u3055\u308c\u308b\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-42\">\u7279\u5b9a\u306e\u66dc\u65e5\u3084\u6761\u4ef6\u3067\u306e\u65e5\u4ed8\u30c1\u30a7\u30c3\u30af<\/h4>\n\n\n\n<p>\u7279\u5b9a\u306e\u66dc\u65e5\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u4f8b\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=\"\">$date = new DateTime('2023-07-15'); \/\/ 2023\u5e747\u670815\u65e5\u306f\u571f\u66dc\u65e5\n$weekday = $date-&gt;format('N'); \/\/ 1\uff08\u6708\u66dc\uff09\u304b\u30897\uff08\u65e5\u66dc\uff09\u307e\u3067\u306e\u6570\u5024\n\n\/\/ \u571f\u65e5\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\nif ($weekday &gt;= 6) {\n    echo \"\u9031\u672b\u3067\u3059\u3002\\n\"; \/\/ \u8868\u793a\u3055\u308c\u308b\n} else {\n    echo \"\u5e73\u65e5\u3067\u3059\u3002\\n\";\n}\n\n\/\/ \u7279\u5b9a\u306e\u66dc\u65e5\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n$is_monday = $date-&gt;format('N') == 1;\n$is_friday = $date-&gt;format('l') == 'Friday';\n\n\/\/ \u795d\u65e5\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\uff08\u5b9f\u969b\u306e\u5b9f\u88c5\u3067\u306f\u795d\u65e5\u30ea\u30b9\u30c8\u3092\u53c2\u7167\uff09\n$holidays = [\n    '2023-01-01', \/\/ \u5143\u65e5\n    '2023-01-09', \/\/ \u6210\u4eba\u306e\u65e5\n    '2023-02-11', \/\/ \u5efa\u56fd\u8a18\u5ff5\u306e\u65e5\n    \/\/ ... \u305d\u306e\u4ed6\u306e\u795d\u65e5\n];\n\n$date_string = $date-&gt;format('Y-m-d');\n$is_holiday = in_array($date_string, $holidays);\n\n\/\/ \u55b6\u696d\u65e5\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n$is_business_day = !$is_holiday &amp;&amp; $weekday &lt;= 5;\n<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u3001\u65e5\u4ed8\u306e\u8a08\u7b97\u3068\u64cd\u4f5c\u306b\u95a2\u3059\u308b\u69d8\u3005\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u8907\u96d1\u306a\u65e5\u4ed8\u51e6\u7406\u3082\u7c21\u6f54\u304b\u3064\u6b63\u78ba\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5b89\u5168\u306a\u65e5\u4ed8\u64cd\u4f5c\u306e\u305f\u3081\u306eDateTimeImmutable\u30af\u30e9\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-43\">DateTimeImmutable\u3092\u4f7f\u3063\u305f\u5b89\u5168\u306a\u65e5\u4ed8\u64cd\u4f5c<\/h2>\n\n\n\n<p>PHP 5.5\u4ee5\u964d\u3067\u5c0e\u5165\u3055\u308c\u305f<code>DateTimeImmutable<\/code>\u30af\u30e9\u30b9\u306f\u3001\u4e0d\u5909\uff08\u30a4\u30df\u30e5\u30fc\u30bf\u30d6\u30eb\uff09\u306a\u65e5\u4ed8\u6642\u9593\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u5f93\u6765\u306e<code>DateTime<\/code>\u30af\u30e9\u30b9\u3068\u306f\u7570\u306a\u308a\u3001<code>DateTimeImmutable<\/code>\u306f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u72b6\u614b\u3092\u5909\u66f4\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057\u3066\u3082\u5143\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u5909\u66f4\u305b\u305a\u3001\u4ee3\u308f\u308a\u306b\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8fd4\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4e88\u671f\u3057\u306a\u3044\u526f\u4f5c\u7528\u3092\u9632\u304e\u3001\u3088\u308a\u5b89\u5168\u306a\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-44\">\u4e0d\u5909\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5229\u70b9\u3068DateTime\u3068\u306e\u9055\u3044<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-45\">DateTime\u3068DateTimeImmutable\u306e\u6839\u672c\u7684\u306a\u9055\u3044<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u4f8b\u3067\u3001<code>DateTime<\/code>\u3068<code>DateTimeImmutable<\/code>\u306e\u632f\u308b\u821e\u3044\u306e\u9055\u3044\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\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=\"\">\/\/ DateTime\u306e\u4f8b\n$dateTime = new DateTime('2023-07-15');\n$modifiedDateTime = $dateTime-&gt;modify('+1 month'); \/\/ \u72b6\u614b\u304c\u5909\u66f4\u3055\u308c\u308b\n\necho $dateTime-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-08-15\necho $modifiedDateTime-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-08-15\n\n\/\/ DateTime\u3068modifiedDateTime\u306f\u540c\u3058\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\nvar_dump($dateTime === $modifiedDateTime); \/\/ \u51fa\u529b: bool(true)\n\n\/\/ DateTimeImmutable\u306e\u4f8b\n$immutableDateTime = new DateTimeImmutable('2023-07-15');\n$modifiedImmutableDateTime = $immutableDateTime-&gt;modify('+1 month'); \/\/ \u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8fd4\u3055\u308c\u308b\n\necho $immutableDateTime-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-07-15 (\u5909\u66f4\u3055\u308c\u3066\u3044\u306a\u3044)\necho $modifiedImmutableDateTime-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-08-15\n\n\/\/ \u5225\u3005\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\nvar_dump($immutableDateTime === $modifiedImmutableDateTime); \/\/ \u51fa\u529b: bool(false)\n<\/pre>\n\n\n\n<p>\u3053\u306e\u4f8b\u304b\u3089\u308f\u304b\u308b\u3088\u3046\u306b\u3001<code>DateTime<\/code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u306f<code>modify()<\/code>\u3092\u547c\u3073\u51fa\u3059\u3068\u5143\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u81ea\u4f53\u304c\u5909\u66f4\u3055\u308c\u307e\u3059\u304c\u3001<code>DateTimeImmutable<\/code>\u3067\u306f\u5143\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u305d\u306e\u307e\u307e\u3067\u3001\u5909\u66f4\u3055\u308c\u305f\u65b0\u3057\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u8fd4\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">\u4e0d\u5909\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3059\u308b\u5229\u70b9<\/h4>\n\n\n\n<p><code>DateTimeImmutable<\/code>\u306e\u3088\u3046\u306a\u4e0d\u5909\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e88\u671f\u3057\u306a\u3044\u526f\u4f5c\u7528\u306e\u9632\u6b62<\/strong>\uff1a \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u5171\u6709\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3067\u3082\u3001\u4e00\u65b9\u3067\u5909\u66f4\u304c\u884c\u308f\u308c\u3066\u3082\u4ed6\u65b9\u306b\u306f\u5f71\u97ff\u3057\u307e\u305b\u3093\u3002<\/li>\n\n\n\n<li><strong>\u95a2\u6570\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3068\u306e\u89aa\u548c\u6027<\/strong>\uff1a \u526f\u4f5c\u7528\u306e\u306a\u3044\u7d14\u7c8b\u306a\u95a2\u6570\u3092\u66f8\u304d\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5<\/strong>\uff1a \u4e26\u884c\u51e6\u7406\u74b0\u5883\u3067\u306e\u5b89\u5168\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u306e\u3057\u3084\u3059\u3055<\/strong>\uff1a \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u72b6\u614b\u5909\u66f4\u3092\u8ffd\u8de1\u3057\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u306e\u5b89\u5168\u6027<\/strong>\uff1a \u9023\u7d9a\u3057\u305f\u30e1\u30bd\u30c3\u30c9\u547c\u3073\u51fa\u3057\u3067\u3082\u3001\u5404\u30b9\u30c6\u30c3\u30d7\u3067\u660e\u78ba\u306a\u4e2d\u9593\u72b6\u614b\u3092\u6301\u3063\u305f\u65b0\u3057\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002<\/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=\"\">\/\/ DateTime\u3092\u4f7f\u3063\u305f\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\uff08\u6ce8\u610f\u304c\u5fc5\u8981\uff09\n$dateTime = new DateTime('2023-07-15');\n$result = $dateTime-&gt;modify('+1 month')\n                  -&gt;modify('+1 day')\n                  -&gt;format('Y-m-d');\n\/\/ \u3053\u306e\u6642\u70b9\u3067$dateTime\u306f\u5143\u306e\u72b6\u614b\u304b\u3089\u5909\u66f4\u3055\u308c\u3066\u3044\u308b\n\n\/\/ DateTimeImmutable\u3092\u4f7f\u3063\u305f\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\uff08\u5b89\u5168\uff09\n$immutableDateTime = new DateTimeImmutable('2023-07-15');\n$result = $immutableDateTime-&gt;modify('+1 month')\n                           -&gt;modify('+1 day')\n                           -&gt;format('Y-m-d');\n\/\/ $immutableDateTime\u306f\u5143\u306e\u72b6\u614b\u306e\u307e\u307e\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-47\">DateTimeImmutable\u306e\u4e3b\u8981\u30e1\u30bd\u30c3\u30c9<\/h4>\n\n\n\n<p><code>DateTimeImmutable<\/code>\u306f<code>DateTimeInterface<\/code>\u3092\u5b9f\u88c5\u3057\u3066\u304a\u308a\u3001<code>DateTime<\/code>\u3068\u307b\u307c\u540c\u3058\u30e1\u30bd\u30c3\u30c9\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u304c\u3001\u72b6\u614b\u3092\u5909\u66f4\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u306f\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8fd4\u3057\u307e\u3059\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=\"\">\/\/ \u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n$date = new DateTimeImmutable('2023-07-15');\n\n\/\/ \u65e5\u4ed8\u3092\u5909\u66f4\uff08\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8fd4\u3055\u308c\u308b\uff09\n$newDate1 = $date-&gt;modify('+1 month');\n$newDate2 = $date-&gt;add(new DateInterval('P1Y'));\n$newDate3 = $date-&gt;sub(new DateInterval('P1D'));\n$newDate4 = $date-&gt;setDate(2024, 1, 1);\n$newDate5 = $date-&gt;setTime(13, 30, 0);\n$newDate6 = $date-&gt;setTimestamp(1672502400);\n$newDate7 = $date-&gt;setTimezone(new DateTimeZone('America\/New_York'));\n\n\/\/ \u5143\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u5909\u66f4\u3055\u308c\u3066\u3044\u306a\u3044\necho $date-&gt;format('Y-m-d H:i:s e'); \/\/ \u51fa\u529b: 2023-07-15 00:00:00 UTC\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-48\">DateTime\u3068DateTimeImmutable\u306e\u76f8\u4e92\u5909\u63db<\/h4>\n\n\n\n<p>\u4e21\u65b9\u306e\u30af\u30e9\u30b9\u9593\u3067\u5909\u63db\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3057\u307e\u3059\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=\"\">\/\/ DateTime\u304b\u3089DateTimeImmutable\u3078\u306e\u5909\u63db\n$dateTime = new DateTime('2023-07-15');\n$immutableDateTime = DateTimeImmutable::createFromMutable($dateTime);\n\n\/\/ DateTimeImmutable\u304b\u3089DateTime\u3078\u306e\u5909\u63db\n$immutableDateTime = new DateTimeImmutable('2023-07-15');\n$dateTime = new DateTime($immutableDateTime-&gt;format('Y-m-d H:i:s.u'), $immutableDateTime-&gt;getTimezone());\n\n\/\/ PHP 8.0\u4ee5\u964d\u3067\u306f\u3088\u308a\u7c21\u6f54\u306b\nif (PHP_VERSION_ID &gt;= 80000) {\n    $dateTime = DateTime::createFromImmutable($immutableDateTime);\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-49\">\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3067\u7f6e\u304d\u63db\u3048\u308b\u3079\u304d\u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p><code>DateTime<\/code>\u3092\u4f7f\u7528\u3057\u305f\u65e2\u5b58\u306e\u30b3\u30fc\u30c9\u3092\u3088\u308a\u5b89\u5168\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3\u3092<code>DateTimeImmutable<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-50\">\u30d1\u30bf\u30fc\u30f31: \u5171\u6709\u3055\u308c\u308bDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5909\u66f4<\/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=\"\">\/\/ \u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3\nfunction calculateDueDate(DateTime $startDate) {\n    \/\/ \u958b\u59cb\u65e5\u3092\u5909\u66f4\u3057\u3066\u3057\u307e\u3046\n    $startDate-&gt;modify('+30 days');\n    return $startDate;\n}\n\n$orderDate = new DateTime('2023-07-15');\n$dueDate = calculateDueDate($orderDate);\n\/\/ \u3053\u306e\u6642\u70b9\u3067$orderDate\u3082\u5909\u66f4\u3055\u308c\u3066\u3044\u308b\necho $orderDate-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-08-14\n\n\/\/ \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5f8c\u306e\u5b89\u5168\u306a\u30b3\u30fc\u30c9\nfunction calculateDueDate(DateTimeImmutable $startDate) {\n    return $startDate-&gt;modify('+30 days');\n}\n\n$orderDate = new DateTimeImmutable('2023-07-15');\n$dueDate = calculateDueDate($orderDate);\n\/\/ $orderDate\u306f\u5909\u66f4\u3055\u308c\u3066\u3044\u306a\u3044\necho $orderDate-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-07-15\necho $dueDate-&gt;format('Y-m-d');   \/\/ \u51fa\u529b: 2023-08-14\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">\u30d1\u30bf\u30fc\u30f32: \u540c\u3058\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u8907\u6570\u306e\u64cd\u4f5c\u3092\u884c\u3046\u30d1\u30bf\u30fc\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=\"\">\/\/ \u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3\nfunction processDate(DateTime $date) {\n    $date-&gt;modify('first day of this month');\n    \/\/ \u4f55\u304b\u51e6\u7406\u3092\u884c\u3046\n    $startOfMonth = $date-&gt;format('Y-m-d');\n\n    $date-&gt;modify('last day of this month');\n    \/\/ \u3055\u3089\u306b\u51e6\u7406\u3092\u884c\u3046\n    $endOfMonth = $date-&gt;format('Y-m-d');\n\n    return [$startOfMonth, $endOfMonth];\n}\n\n\/\/ \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5f8c\u306e\u5b89\u5168\u306a\u30b3\u30fc\u30c9\nfunction processDate(DateTimeImmutable $date) {\n    $firstDay = $date-&gt;modify('first day of this month');\n    \/\/ \u4f55\u304b\u51e6\u7406\u3092\u884c\u3046\n    $startOfMonth = $firstDay-&gt;format('Y-m-d');\n\n    $lastDay = $date-&gt;modify('last day of this month');\n    \/\/ \u3055\u3089\u306b\u51e6\u7406\u3092\u884c\u3046\n    $endOfMonth = $lastDay-&gt;format('Y-m-d');\n\n    return [$startOfMonth, $endOfMonth];\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">\u30d1\u30bf\u30fc\u30f33: \u6761\u4ef6\u5206\u5c90\u3067\u306eDateTime\u306e\u5909\u66f4<\/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=\"\">\/\/ \u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3\nfunction adjustDate(DateTime $date, $condition) {\n    if ($condition) {\n        $date-&gt;modify('+1 day');\n    } else {\n        $date-&gt;modify('+1 week');\n    }\n    return $date;\n}\n\n\/\/ \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5f8c\u306e\u5b89\u5168\u306a\u30b3\u30fc\u30c9\nfunction adjustDate(DateTimeImmutable $date, $condition) {\n    if ($condition) {\n        return $date-&gt;modify('+1 day');\n    } else {\n        return $date-&gt;modify('+1 week');\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">\u30d1\u30bf\u30fc\u30f34: \u914d\u5217\u5185\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u64cd\u4f5c<\/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=\"\">\/\/ \u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3\nfunction processEvents(array $events) {\n    foreach ($events as $event) {\n        \/\/ \u5404\u30a4\u30d9\u30f3\u30c8\u306e\u65e5\u4ed8\u3092\u7fcc\u65e5\u306b\u5909\u66f4\n        $event-&gt;date-&gt;modify('+1 day');\n    }\n    return $events;\n}\n\n\/\/ \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5f8c\u306e\u5b89\u5168\u306a\u30b3\u30fc\u30c9\nfunction processEvents(array $events) {\n    $result = [];\n    foreach ($events as $event) {\n        \/\/ \u30a4\u30d9\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30b3\u30d4\u30fc\n        $newEvent = clone $event;\n        \/\/ \u65b0\u3057\u3044\u65e5\u4ed8\u3092\u8a2d\u5b9a\n        $newEvent-&gt;date = $event-&gt;date-&gt;modify('+1 day');\n        $result[] = $newEvent;\n    }\n    return $result;\n}\n\n\/\/ \u3055\u3089\u306b\u6539\u5584: DateTimeImmutable\u3092\u4f7f\u7528\nfunction processEventsImmutable(array $events) {\n    $result = [];\n    foreach ($events as $event) {\n        \/\/ \u30a4\u30d9\u30f3\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30b3\u30d4\u30fc\n        $newEvent = clone $event;\n        \/\/ \u65e5\u4ed8\u304c\u65e2\u306bDateTimeImmutable\u3067\u3042\u308c\u3070\u5b89\u5168\u306b\u64cd\u4f5c\u3067\u304d\u308b\n        $newEvent-&gt;date = $event-&gt;date-&gt;modify('+1 day');\n        $result[] = $newEvent;\n    }\n    return $result;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-54\">\u30d1\u30bf\u30fc\u30f35: \u8fd4\u308a\u5024\u306e\u518d\u5229\u7528<\/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=\"\">\/\/ \u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3\nfunction getNextMonth(DateTime $date) {\n    return $date-&gt;modify('first day of next month');\n}\n\n$date = new DateTime('2023-07-15');\n$nextMonth = getNextMonth($date);\n\/\/ $date\u3082\u5909\u66f4\u3055\u308c\u3066\u3044\u308b\necho $date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-08-01\n\n\/\/ \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5f8c\u306e\u5b89\u5168\u306a\u30b3\u30fc\u30c9\nfunction getNextMonth(DateTimeImmutable $date) {\n    return $date-&gt;modify('first day of next month');\n}\n\n$date = new DateTimeImmutable('2023-07-15');\n$nextMonth = getNextMonth($date);\n\/\/ $date\u306f\u5909\u66f4\u3055\u308c\u3066\u3044\u306a\u3044\necho $date-&gt;format('Y-m-d');     \/\/ \u51fa\u529b: 2023-07-15\necho $nextMonth-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-08-01\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-55\">\u6bb5\u968e\u7684\u306a\u79fb\u884c\u6226\u7565<\/h4>\n\n\n\n<p>\u65e2\u5b58\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092<code>DateTimeImmutable<\/code>\u306b\u79fb\u884c\u3059\u308b\u969b\u306f\u3001\u4ee5\u4e0b\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u6709\u52b9\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65b0\u3057\u3044\u30b3\u30fc\u30c9\u3067\u306f<code>DateTimeImmutable<\/code>\u3092\u4f7f\u7528\u3059\u308b<\/strong>\uff1a \u65b0\u898f\u958b\u767a\u90e8\u5206\u304b\u3089\u307e\u305a\u79fb\u884c\u3057\u3001\u5f90\u3005\u306b\u5e83\u3052\u3066\u3044\u304f<\/li>\n\n\n\n<li><strong>\u30af\u30e9\u30b9\u306etype hint\u3092<code>DateTimeInterface<\/code>\u306b\u5909\u66f4\u3059\u308b<\/strong>\uff1a <code>DateTime<\/code>\u3068<code>DateTimeImmutable<\/code>\u306e\u4e21\u65b9\u3092\u53d7\u3051\u5165\u308c\u308b\u3088\u3046\u306b\u3059\u308b <code>\/\/ \u4e21\u65b9\u306e\u30af\u30e9\u30b9\u306b\u5bfe\u5fdc function processDate(DateTimeInterface $date) { \/\/ DateTimeInterface\u3092\u5b9f\u88c5\u3057\u3066\u3044\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306a\u3089\u3069\u3061\u3089\u3067\u3082\u51e6\u7406\u53ef\u80fd $formatted = $date-&gt;format('Y-m-d'); \/\/ ... return $formatted; }<\/code><\/li>\n\n\n\n<li><strong>\u30d5\u30a1\u30af\u30c8\u30ea\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u3092\u62bd\u8c61\u5316\u3059\u308b<\/strong>\uff1a <code>class DateFactory { public static function create($dateString = 'now', $timezone = null) { if ($timezone === null) { return new DateTimeImmutable($dateString); } return new DateTimeImmutable($dateString, new DateTimeZone($timezone)); } } \/\/ \u4f7f\u7528\u4f8b $date = DateFactory::create('2023-07-15');<\/code><\/li>\n\n\n\n<li><strong>\u614e\u91cd\u306a\u30c6\u30b9\u30c8<\/strong>\uff1a \u79fb\u884c\u6642\u306b\u306f\u5341\u5206\u306a\u30c6\u30b9\u30c8\u3092\u884c\u3044\u3001\u52d5\u4f5c\u304c\u5909\u308f\u3089\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<p><code>DateTimeImmutable<\/code>\u3092\u63a1\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u304c\u3088\u308a\u5b89\u5168\u306b\u306a\u308a\u3001\u30d0\u30b0\u306e\u767a\u751f\u30ea\u30b9\u30af\u3092\u6e1b\u3089\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u6301\u3064\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4e0d\u5909\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5229\u70b9\u304c\u5927\u304d\u304f\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001JSON\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-56\">JSON\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a<\/h2>\n\n\n\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u65e5\u4ed8\u3068\u6642\u9593\u306e\u30c7\u30fc\u30bf\u306fAPI\u901a\u4fe1\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306a\u3069\u69d8\u3005\u306a\u5834\u9762\u3067\u6271\u308f\u308c\u307e\u3059\u3002PHP\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092JSON\u5f62\u5f0f\u306b\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3059\u308b\u65b9\u6cd5\u3084\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-57\">DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u30fb\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-58\">JSON\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u306e\u8ab2\u984c<\/h4>\n\n\n\n<p>PHP\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u305d\u306e\u307e\u307e<code>json_encode()<\/code>\u95a2\u6570\u306b\u6e21\u3059\u3068\u3001\u671f\u5f85\u3057\u305f\u7d50\u679c\u304c\u5f97\u3089\u308c\u307e\u305b\u3093\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=\"\">$date = new DateTime('2023-07-15 14:30:45');\necho json_encode($date);\n\/\/ \u51fa\u529b: {\"date\":\"2023-07-15 14:30:45.000000\",\"timezone_type\":3,\"timezone\":\"UTC\"}\n<\/pre>\n\n\n\n<p>\u3053\u306e\u51fa\u529b\u5f62\u5f0f\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u554f\u984c\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5197\u9577\u306a\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u308b<\/li>\n\n\n\n<li>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b5\u30a4\u30c9\u3067\u306e\u89e3\u6790\u304c\u8907\u96d1\u306b\u306a\u308b<\/li>\n\n\n\n<li>\u6a19\u6e96\u7684\u306a\u65e5\u4ed8\u5f62\u5f0f\uff08ISO 8601\u306a\u3069\uff09\u306b\u306a\u3063\u3066\u3044\u306a\u3044<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-59\">DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306eJSON\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u65b9\u6cd5<\/h4>\n\n\n\n<p>\u3088\u308a\u9069\u5207\u306aJSON\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3092\u884c\u3046\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-60\">1. JsonSerializable\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5b9f\u88c5<\/h5>\n\n\n\n<p>PHP 5.4\u4ee5\u964d\u3067\u306f\u3001<code>JsonSerializable<\/code>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f7f\u3063\u3066\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306eJSON\u8868\u73fe\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\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=\"\">class JsonDateTime extends DateTime implements JsonSerializable {\n    public function jsonSerialize(): mixed {\n        return $this-&gt;format(DateTime::ATOM); \/\/ ISO 8601\u5f62\u5f0f\n    }\n}\n\n$date = new JsonDateTime('2023-07-15 14:30:45');\necho json_encode($date);\n\/\/ \u51fa\u529b: \"2023-07-15T14:30:45+00:00\"\n<\/pre>\n\n\n\n<p>\u3057\u304b\u3057\u3001\u3059\u3067\u306b\u5b58\u5728\u3059\u308bDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u306f\u3001\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u76f4\u63a5\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-61\">2. \u30ab\u30b9\u30bf\u30e0\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u5909\u63db\u3059\u308b<\/h5>\n\n\n\n<p>\u65e2\u5b58\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092JSON\u5316\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4e8b\u524d\u306b\u5909\u63db\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\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=\"\">function convertDatesToIso8601($data) {\n    if ($data instanceof DateTime || $data instanceof DateTimeImmutable) {\n        return $data-&gt;format(DateTime::ATOM);\n    }\n    \n    if (is_array($data)) {\n        foreach ($data as $key =&gt; $value) {\n            $data[$key] = convertDatesToIso8601($value);\n        }\n    } elseif (is_object($data)) {\n        $vars = get_object_vars($data);\n        foreach ($vars as $key =&gt; $value) {\n            $data-&gt;$key = convertDatesToIso8601($value);\n        }\n    }\n    \n    return $data;\n}\n\n$event = [\n    'title' =&gt; 'Conference',\n    'start_date' =&gt; new DateTime('2023-07-15 09:00:00'),\n    'end_date' =&gt; new DateTime('2023-07-15 17:00:00')\n];\n\n$json = json_encode(convertDatesToIso8601($event));\necho $json;\n\/\/ \u51fa\u529b: {\"title\":\"Conference\",\"start_date\":\"2023-07-15T09:00:00+00:00\",\"end_date\":\"2023-07-15T17:00:00+00:00\"}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-62\">3. API\u3084\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b<\/h5>\n\n\n\n<p>\u591a\u304f\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u3001DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u9069\u5207\u306b\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3059\u308b\u6a5f\u80fd\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\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=\"\">\/\/ Symfony\u306e\u4f8b\nuse Symfony\\Component\\Serializer\\Serializer;\nuse Symfony\\Component\\Serializer\\Encoder\\JsonEncoder;\nuse Symfony\\Component\\Serializer\\Normalizer\\ObjectNormalizer;\nuse Symfony\\Component\\Serializer\\Normalizer\\DateTimeNormalizer;\n\n$encoders = [new JsonEncoder()];\n$normalizers = [new DateTimeNormalizer(), new ObjectNormalizer()];\n$serializer = new Serializer($normalizers, $encoders);\n\n$event = [\n    'title' =&gt; 'Conference',\n    'start_date' =&gt; new DateTime('2023-07-15 09:00:00')\n];\n\n$json = $serializer-&gt;serialize($event, 'json');\necho $json;\n\/\/ \u51fa\u529b: {\"title\":\"Conference\",\"start_date\":\"2023-07-15T09:00:00+00:00\"}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-63\">JSON\u304b\u3089\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba<\/h4>\n\n\n\n<p>JSON\u30c7\u30fc\u30bf\u304b\u3089DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u5fa9\u5143\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-64\">1. JSON\u5fa9\u53f7\u5f8c\u306b\u65e5\u4ed8\u6587\u5b57\u5217\u3092\u5909\u63db\u3059\u308b<\/h5>\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=\"\">$json = '{\"title\":\"Conference\",\"start_date\":\"2023-07-15T09:00:00+00:00\"}';\n$data = json_decode($json, true);\n\n\/\/ ISO 8601\u5f62\u5f0f\u306e\u65e5\u4ed8\u6587\u5b57\u5217\u3092DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\n$data['start_date'] = new DateTime($data['start_date']);\n\necho $data['start_date']-&gt;format('Y-m-d H:i:s');\n\/\/ \u51fa\u529b: 2023-07-15 09:00:00\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-65\">2. \u518d\u5e30\u7684\u306b\u65e5\u4ed8\u6587\u5b57\u5217\u3092\u691c\u51fa\u3057\u3066\u5909\u63db\u3059\u308b\u95a2\u6570<\/h5>\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 convertIso8601ToDates($data) {\n    if (is_string($data) &amp;&amp; preg_match('\/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2}$\/', $data)) {\n        return new DateTime($data);\n    }\n    \n    if (is_array($data)) {\n        foreach ($data as $key =&gt; $value) {\n            $data[$key] = convertIso8601ToDates($value);\n        }\n    } elseif (is_object($data)) {\n        $vars = get_object_vars($data);\n        foreach ($vars as $key =&gt; $value) {\n            $data-&gt;$key = convertIso8601ToDates($value);\n        }\n    }\n    \n    return $data;\n}\n\n$json = '{\"title\":\"Conference\",\"start_date\":\"2023-07-15T09:00:00+00:00\"}';\n$data = json_decode($json);\n$data = convertIso8601ToDates($data);\n\necho $data-&gt;start_date-&gt;format('Y-m-d H:i:s');\n\/\/ \u51fa\u529b: 2023-07-15 09:00:00\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-66\">3. \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u3092\u4f7f\u7528\u3059\u308b<\/h5>\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=\"\">\/\/ Symfony\u306e\u4f8b\nuse Symfony\\Component\\Serializer\\Serializer;\nuse Symfony\\Component\\Serializer\\Encoder\\JsonEncoder;\nuse Symfony\\Component\\Serializer\\Normalizer\\ObjectNormalizer;\nuse Symfony\\Component\\Serializer\\Normalizer\\DateTimeNormalizer;\n\n$encoders = [new JsonEncoder()];\n$normalizers = [new DateTimeNormalizer(), new ObjectNormalizer()];\n$serializer = new Serializer($normalizers, $encoders);\n\n$json = '{\"title\":\"Conference\",\"start_date\":\"2023-07-15T09:00:00+00:00\"}';\n$data = $serializer-&gt;deserialize($json, 'array', 'json');\n\n\/\/ $data['start_date']\u306fDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-67\">\u5404\u7a2e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u4e92\u63db\u6027\u3092\u78ba\u4fdd\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u9023\u643a\u306b\u3064\u3044\u3066\u3082\u3001\u3044\u304f\u3064\u304b\u306e\u6ce8\u610f\u70b9\u3068\u30c6\u30af\u30cb\u30c3\u30af\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-68\">MySQL\u3068\u306e\u9023\u643a<\/h4>\n\n\n\n<p>MySQL\u3067\u306f\u3001\u65e5\u4ed8\u3068\u6642\u9593\u3092\u8868\u3059\u30c7\u30fc\u30bf\u578b\u3068\u3057\u3066\u4e3b\u306b<code>DATE<\/code>\u3001<code>DATETIME<\/code>\u3001<code>TIMESTAMP<\/code>\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\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=\"\">\/\/ PDO\u3092\u4f7f\u7528\u3057\u3066DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092MySQL\u306b\u4fdd\u5b58\n$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');\n$pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n$date = new DateTime('2023-07-15 14:30:45');\n\n\/\/ \u633f\u5165\u30af\u30a8\u30ea\u306e\u6e96\u5099\n$stmt = $pdo-&gt;prepare(\"INSERT INTO events (title, event_date) VALUES (?, ?)\");\n\n\/\/ DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3057\u3066\u4fdd\u5b58\n$stmt-&gt;execute(['Conference', $date-&gt;format('Y-m-d H:i:s')]);\n\n\/\/ \u30c7\u30fc\u30bf\u306e\u53d6\u5f97\n$stmt = $pdo-&gt;query(\"SELECT * FROM events\");\n$events = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);\n\n\/\/ \u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u3092DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\nforeach ($events as &amp;$event) {\n    $event['event_date'] = new DateTime($event['event_date']);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-69\">PostgreSQL\u3068\u306e\u9023\u643a<\/h4>\n\n\n\n<p>PostgreSQL\u306f\u3001ISO 8601\u5f62\u5f0f\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3084\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u4ed8\u304d\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\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=\"\">\/\/ PostgreSQL\u3067\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u51e6\u7406\n$pdo = new PDO('pgsql:host=localhost;dbname=testdb', 'username', 'password');\n$pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n$date = new DateTime('2023-07-15 14:30:45', new DateTimeZone('Europe\/Paris'));\n\n\/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u60c5\u5831\u3092\u542b\u3081\u3066\u4fdd\u5b58\n$stmt = $pdo-&gt;prepare(\"INSERT INTO events (title, event_date) VALUES (?, ?)\");\n$stmt-&gt;execute(['Conference', $date-&gt;format('Y-m-d H:i:sO')]);\n\n\/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u4ed8\u304d\u3067\u53d6\u5f97\n$stmt = $pdo-&gt;query(\"SELECT * FROM events\");\n$events = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);\n\nforeach ($events as &amp;$event) {\n    $event['event_date'] = new DateTime($event['event_date']);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-70\">SQLite\u3068\u306e\u9023\u643a<\/h4>\n\n\n\n<p>SQLite\u3067\u306f\u3001\u65e5\u4ed8\u3068\u6642\u9593\u3092\u6587\u5b57\u5217\u307e\u305f\u306f\u6570\u5024\u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\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=\"\">\/\/ SQLite\u3067\u306eDateTime\u51e6\u7406\n$pdo = new PDO('sqlite:database.sqlite');\n$pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n$date = new DateTime('2023-07-15 14:30:45');\n\n\/\/ ISO 8601\u5f62\u5f0f\u3067\u4fdd\u5b58\n$stmt = $pdo-&gt;prepare(\"INSERT INTO events (title, event_date) VALUES (?, ?)\");\n$stmt-&gt;execute(['Conference', $date-&gt;format(DateTime::ATOM)]);\n\n\/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3068\u3057\u3066\u4fdd\u5b58\u3059\u308b\u5834\u5408\n$stmt = $pdo-&gt;prepare(\"INSERT INTO events (title, event_timestamp) VALUES (?, ?)\");\n$stmt-&gt;execute(['Conference', $date-&gt;getTimestamp()]);\n\n\/\/ \u30c7\u30fc\u30bf\u306e\u53d6\u5f97\u3068\u5909\u63db\n$stmt = $pdo-&gt;query(\"SELECT * FROM events\");\n$events = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);\n\nforeach ($events as &amp;$event) {\n    if (isset($event['event_date'])) {\n        $event['event_date'] = new DateTime($event['event_date']);\n    }\n    if (isset($event['event_timestamp'])) {\n        $datetime = new DateTime();\n        $datetime-&gt;setTimestamp($event['event_timestamp']);\n        $event['event_timestamp'] = $datetime;\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-71\">ORM\u3092\u4f7f\u7528\u3057\u305f\u65e5\u4ed8\u51e6\u7406<\/h4>\n\n\n\n<p>\u591a\u304f\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u4f7f\u7528\u3055\u308c\u308bORM\u3067\u306f\u3001DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u3088\u308a\u7c21\u5358\u306b\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\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=\"\">\/\/ Doctrine ORM\u306e\u4f8b\uff08Symfony\u306a\u3069\u3067\u4f7f\u7528\uff09\n\/**\n * @Entity\n * @Table(name=\"events\")\n *\/\nclass Event {\n    \/**\n     * @Id\n     * @GeneratedValue\n     * @Column(type=\"integer\")\n     *\/\n    private $id;\n    \n    \/**\n     * @Column(type=\"string\")\n     *\/\n    private $title;\n    \n    \/**\n     * @Column(type=\"datetime\")\n     *\/\n    private $eventDate;\n    \n    \/\/ \u30b2\u30c3\u30bf\u30fc\u3068\u30bb\u30c3\u30bf\u30fc\n    public function getEventDate(): ?\\DateTimeInterface {\n        return $this-&gt;eventDate;\n    }\n    \n    public function setEventDate(\\DateTimeInterface $eventDate): self {\n        $this-&gt;eventDate = $eventDate;\n        return $this;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$event = new Event();\n$event-&gt;setTitle('Conference');\n$event-&gt;setEventDate(new DateTime('2023-07-15 14:30:45'));\n\n$entityManager-&gt;persist($event);\n$entityManager-&gt;flush();\n<\/pre>\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=\"\">\/\/ Laravel Eloquent\u306e\u4f8b\nclass Event extends Model {\n    \/\/ \u65e5\u4ed8\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u6307\u5b9a\n    protected $dates = [\n        'created_at',\n        'updated_at',\n        'event_date'\n    ];\n    \n    \/\/ \u65e5\u4ed8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6307\u5b9a\n    public function getEventDateFormattedAttribute() {\n        return $this-&gt;event_date-&gt;format('Y\u5e74m\u6708d\u65e5 H:i');\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$event = new Event();\n$event-&gt;title = 'Conference';\n$event-&gt;event_date = new DateTime('2023-07-15 14:30:45');\n$event-&gt;save();\n\n\/\/ \u53d6\u5f97\u3068\u8868\u793a\n$event = Event::find(1);\necho $event-&gt;event_date-&gt;format('Y-m-d'); \/\/ \u51fa\u529b: 2023-07-15\necho $event-&gt;event_date_formatted; \/\/ \u51fa\u529b: 2023\u5e7407\u670815\u65e5 14:30\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-72\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u51e6\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>UTC\u3067\u4fdd\u5b58\u3059\u308b<\/strong>\uff1a \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\u5e38\u306bUTC\u6642\u9593\u3092\u4fdd\u5b58\u3057\u3001\u8868\u793a\u6642\u306b\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5909\u63db\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9069\u5207\u306a\u30c7\u30fc\u30bf\u578b\u3092\u9078\u629e\u3059\u308b<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u65e5\u4ed8\u306e\u307f: <code>DATE<\/code><\/li>\n\n\n\n<li>\u65e5\u4ed8\u3068\u6642\u9593: <code>DATETIME<\/code>\u307e\u305f\u306f<code>TIMESTAMP<\/code><\/li>\n\n\n\n<li>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u60c5\u5831\u304c\u5fc5\u8981: <code>TIMESTAMP WITH TIME ZONE<\/code>\uff08PostgreSQL\uff09<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30d7\u30ea\u30da\u30a2\u30c9\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\u3059\u308b<\/strong>\uff1a DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092SQL\u6587\u5b57\u5217\u306b\u76f4\u63a5\u57cb\u3081\u8fbc\u307e\u305a\u3001\u30d7\u30ea\u30da\u30a2\u30c9\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a2d\u5b9a\u3059\u308b<\/strong>\uff1a \u65e5\u4ed8\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u983b\u7e41\u306b\u691c\u7d22\u3084\u4e26\u3079\u66ff\u3048\u3092\u3059\u308b\u5834\u5408\u306f\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5b9a\u671f\u7684\u306a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7<\/strong>\uff1a \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u66f4\u65b0\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308b\u305f\u3081\u3001\u5b9a\u671f\u7684\u306a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u91cd\u8981\u3067\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u65e5\u4ed8\u3068\u6642\u9593\u30c7\u30fc\u30bf\u306f\u307b\u3068\u3093\u3069\u3059\u3079\u3066\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068JSON\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9069\u5207\u306a\u9023\u643a\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001DateTime\u30af\u30e9\u30b9\u4f7f\u7528\u6642\u306b\u3088\u304f\u906d\u9047\u3059\u308b\u843d\u3068\u3057\u7a74\u3068\u305d\u306e\u5bfe\u7b56\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-73\">DateTime\u30af\u30e9\u30b9\u4f7f\u7528\u6642\u306e5\u3064\u306e\u843d\u3068\u3057\u7a74\u3068\u5bfe\u7b56<\/h2>\n\n\n\n<p>PHP\u306eDateTime\u30af\u30e9\u30b9\u306f\u5f37\u529b\u3067\u67d4\u8edf\u306a\u30c4\u30fc\u30eb\u3067\u3059\u304c\u3001\u4f7f\u7528\u65b9\u6cd5\u306b\u3088\u3063\u3066\u306f\u4e88\u671f\u305b\u306c\u52d5\u4f5c\u3084\u30d0\u30b0\u3092\u5f15\u304d\u8d77\u3053\u3059\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u958b\u767a\u8005\u304c\u3088\u304f\u906d\u9047\u3059\u308b\u843d\u3068\u3057\u7a74\u3068\u305d\u306e\u56de\u907f\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-74\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u95a2\u9023\u3059\u308b\u4e00\u822c\u7684\u306a\u30d0\u30b0\u3068\u89e3\u6c7a\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-75\">\u843d\u3068\u3057\u7a741: \u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u8a2d\u5b9a\u5fd8\u308c<\/h4>\n\n\n\n<p>PHP\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u306f\u3001\u660e\u793a\u7684\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u5834\u5408\u3001\u8b66\u544a\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\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=\"\">Warning: date(): It is not safe to rely on the system's timezone settings.\n<\/pre>\n\n\n\n<p>\u307e\u305f\u3001\u30b7\u30b9\u30c6\u30e0\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u304c\u4e88\u671f\u3057\u306a\u3044\u3082\u306e\u3067\u3042\u308b\u3068\u3001\u65e5\u4ed8\u8a08\u7b97\u306b\u5f71\u97ff\u3092\u53ca\u307c\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5\u6642\u306b\u660e\u793a\u7684\u306b\u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\u3059\u308b\uff1a<\/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=\"\">\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30d5\u30a1\u30a4\u30eb\u3084index.php\u306a\u3069\u3067\ndate_default_timezone_set('UTC');\n\n\/\/ \u307e\u305f\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8aad\u307f\u8fbc\u3080\ndate_default_timezone_set($config['timezone'] ?? 'UTC');\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>UPC\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u304c\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u6700\u9069\u306a\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u9078\u629e\u3059\u308b\uff1a<\/li>\n<\/ol>\n\n\n<div id=\"id-8276f0dd-ec9f-43aa-b580-18187b9110b4\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/th><th>\u63a8\u5968\u30bf\u30a4\u30e0\u30be\u30fc\u30f3<\/th><th>\u7406\u7531<\/th><\/tr><\/thead><tbody><tr><td>\u56fd\u969b\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/td><td>UTC<\/td><td>\u6a19\u6e96\u7684\u3067\u5909\u63db\u304c\u5bb9\u6613<\/td><\/tr><tr><td>\u5358\u4e00\u5730\u57df\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/td><td>\u305d\u306e\u5730\u57df\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3<\/td><td>\u30e6\u30fc\u30b6\u30fc\u306b\u3068\u3063\u3066\u76f4\u611f\u7684<\/td><\/tr><tr><td>\u30ed\u30b0\u8a18\u9332\u30fb\u76e3\u67fb<\/td><td>UTC<\/td><td>\u30b5\u30fc\u30d0\u30fc\u9593\u3067\u4e00\u8cab\u6027\u3092\u4fdd\u3064<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u4f5c\u6210\u6642\u306b\u306f\u5e38\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u660e\u793a\u3059\u308b\uff1a<\/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=\"\">\/\/ \u660e\u793a\u7684\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u6307\u5b9a\n$date = new DateTime('2023-07-15', new DateTimeZone('UTC'));\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-76\">\u843d\u3068\u3057\u7a742: \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u5909\u63db\u6642\u306e\u8aa4\u89e3<\/h4>\n\n\n\n<p><code>setTimezone()<\/code>\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u65e5\u6642\u306e\u300c\u8868\u73fe\u300d\u3092\u5909\u66f4\u3059\u308b\u3060\u3051\u3067\u3001\u6642\u70b9\u81ea\u4f53\u306f\u5909\u308f\u308a\u307e\u305b\u3093\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=\"\">\/\/ UTC\u3067\u65e5\u6642\u3092\u4f5c\u6210\n$date = new DateTime('2023-07-15 12:00:00', new DateTimeZone('UTC'));\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u51fa\u529b: 2023-07-15 12:00:00\n\n\/\/ \u6771\u4eac\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5909\u66f4\n$date-&gt;setTimezone(new DateTimeZone('Asia\/Tokyo'));\necho $date-&gt;format('Y-m-d H:i:s'); \/\/ \u51fa\u529b: 2023-07-15 21:00:00\n\n\/\/ \u5185\u90e8\u7684\u306a\u6642\u70b9\uff08\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\uff09\u306f\u540c\u3058\necho $date-&gt;getTimestamp(); \/\/ \u5909\u308f\u3089\u306a\u3044\n<\/pre>\n\n\n\n<p>\u3057\u304b\u3057\u958b\u767a\u8005\u304c\u610f\u56f3\u3057\u305f\u306e\u306f\u3001\u300c\u540c\u3058\u6642\u523b\u3092\u5225\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u8868\u73fe\u306b\u5909\u66f4\u3059\u308b\u300d\u3053\u3068\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff1a<\/p>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u610f\u56f3\u3092\u660e\u78ba\u306b\u3059\u308b\u30b3\u30fc\u30c9\u3092\u66f8\u304f\uff1a<\/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=\"\">\/\/ \u300c12:00 UTC\u300d\u3068\u300c12:00 \u6771\u4eac\u6642\u9593\u300d\u306f\u7570\u306a\u308b\u6642\u70b9\n$utcNoon = new DateTime('2023-07-15 12:00:00', new DateTimeZone('UTC'));\n$tokyoNoon = new DateTime('2023-07-15 12:00:00', new DateTimeZone('Asia\/Tokyo'));\n\n\/\/ \u540c\u3058\u300c\u8868\u8a18\u300d\u306e\u6642\u523b\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u4e00\u5ea6\u4f5c\u6210\u3057\u3066\u304b\u3089\u5909\u63db\n$utcNoon = new DateTime('2023-07-15 12:00:00', new DateTimeZone('UTC'));\n$sameTimeInTokyo = clone $utcNoon;\n$sameTimeInTokyo-&gt;setTimezone(new DateTimeZone('Asia\/Tokyo'));\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u95a2\u6570\u3084\u30e1\u30bd\u30c3\u30c9\u540d\u3067\u610f\u56f3\u3092\u660e\u78ba\u306b\u3059\u308b\uff1a<\/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=\"\">\/\/ \u540c\u3058\u6642\u70b9\u3092\u7570\u306a\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3067\u8868\u73fe\nfunction convertTimezone(DateTimeInterface $date, string $timezone): DateTimeInterface {\n    $result = clone $date;\n    $result-&gt;setTimezone(new DateTimeZone($timezone));\n    return $result;\n}\n\n\/\/ \u540c\u3058\u300c\u6642\u523b\u8868\u8a18\u300d\u3092\u7570\u306a\u308b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u6642\u70b9\u3068\u3057\u3066\u89e3\u91c8\nfunction interpretAsTimezone(DateTimeInterface $date, string $timezone): DateTimeInterface {\n    $format = $date-&gt;format('Y-m-d H:i:s');\n    return new DateTime($format, new DateTimeZone($timezone));\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-77\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u3068\u306a\u308a\u3046\u308b\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-78\">\u843d\u3068\u3057\u7a743: \u975e\u52b9\u7387\u306aDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f7f\u7528<\/h4>\n\n\n\n<p>\u5927\u91cf\u306eDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u30fb\u64cd\u4f5c\u3059\u308b\u3068\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4f4e\u4e0b\u306e\u539f\u56e0\u306b\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\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=\"\">\/\/ \u975e\u52b9\u7387\u306a\u30b3\u30fc\u30c9\u4f8b\n$start = microtime(true);\n\n$dates = [];\nfor ($i = 0; $i &lt; 10000; $i++) {\n    $date = new DateTime();\n    $date-&gt;modify(\"+{$i} days\");\n    $dates[] = $date-&gt;format('Y-m-d');\n}\n\necho \"\u5b9f\u884c\u6642\u9593: \" . (microtime(true) - $start) . \" \u79d2\\n\";\n\/\/ \u5b9f\u884c\u6642\u9593: 0.1\uff5e0.3\u79d2\u7a0b\u5ea6\uff08\u74b0\u5883\u306b\u3088\u308b\uff09\n<\/pre>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5fc5\u8981\u306a\u5834\u5408\u306e\u307fDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\uff1a<\/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=\"\">\/\/ \u3088\u308a\u52b9\u7387\u7684\u306a\u30b3\u30fc\u30c9\n$start = microtime(true);\n\n$base = time();\n$dates = [];\nfor ($i = 0; $i &lt; 10000; $i++) {\n    $timestamp = $base + ($i * 86400); \/\/ 86400 = 1\u65e5\u306e\u79d2\u6570\n    $dates[] = date('Y-m-d', $timestamp);\n}\n\necho \"\u5b9f\u884c\u6642\u9593: \" . (microtime(true) - $start) . \" \u79d2\\n\";\n\/\/ \u5b9f\u884c\u6642\u9593: 0.01\uff5e0.03\u79d2\u7a0b\u5ea6\uff08\u74b0\u5883\u306b\u3088\u308b\uff09\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u518d\u5229\u7528\u3059\u308b\uff1a<\/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=\"\">\/\/ \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u518d\u5229\u7528\u3059\u308b\u4f8b\n$start = microtime(true);\n\n$date = new DateTime();\n$dates = [];\nfor ($i = 0; $i &lt; 10000; $i++) {\n    $date-&gt;modify(($i === 0 ? '' : '+1 day'));\n    $dates[] = $date-&gt;format('Y-m-d');\n}\n\necho \"\u5b9f\u884c\u6642\u9593: \" . (microtime(true) - $start) . \" \u79d2\\n\";\n\/\/ \u5b9f\u884c\u6642\u9593: 0.02\uff5e0.05\u79d2\u7a0b\u5ea6\uff08\u74b0\u5883\u306b\u3088\u308b\uff09\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>DateTimeImmutable\u3067\u9023\u7d9a\u64cd\u4f5c\u3092\u884c\u3046\u5834\u5408\u306f\u3001\u7d50\u679c\u3092\u5909\u6570\u306b\u4fdd\u5b58\u3059\u308b\uff1a<\/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=\"\">\/\/ DateTimeImmutable\u3092\u52b9\u7387\u7684\u306b\u4f7f\u3046\u4f8b\n$date = new DateTimeImmutable('2023-01-01');\n\n\/\/ \u975e\u52b9\u7387\u306a\u4f8b\n$result1 = $date-&gt;modify('+1 day')-&gt;modify('+1 month')-&gt;modify('+1 year');\n\n\/\/ \u52b9\u7387\u7684\u306a\u4f8b\n$temp = $date-&gt;modify('+1 day');\n$temp = $temp-&gt;modify('+1 month');\n$result2 = $temp-&gt;modify('+1 year');\n<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30d0\u30c3\u30c1\u51e6\u7406\u3067\u306f\u65e5\u4ed8\u8a08\u7b97\u3092\u30af\u30a8\u30ea\u306b\u4efb\u305b\u308b\uff1a<\/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=\"\">\/\/ PHP\u3067\u65e5\u4ed8\u8a08\u7b97\u3092\u884c\u3046\u975e\u52b9\u7387\u306a\u4f8b\n$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');\n$stmt = $pdo-&gt;query(\"SELECT * FROM events\");\n$events = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);\n\n$tomorrow = new DateTime('tomorrow');\n$tomorrowEvents = [];\nforeach ($events as $event) {\n    $eventDate = new DateTime($event['event_date']);\n    if ($eventDate-&gt;format('Y-m-d') === $tomorrow-&gt;format('Y-m-d')) {\n        $tomorrowEvents[] = $event;\n    }\n}\n\n\/\/ SQL\u3067\u65e5\u4ed8\u8a08\u7b97\u3092\u884c\u3046\u52b9\u7387\u7684\u306a\u4f8b\n$tomorrow = (new DateTime('tomorrow'))-&gt;format('Y-m-d');\n$stmt = $pdo-&gt;prepare(\"SELECT * FROM events WHERE DATE(event_date) = ?\");\n$stmt-&gt;execute([$tomorrow]);\n$tomorrowEvents = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-79\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u3092\u907f\u3051\u308b\u305f\u3081\u306e\u5165\u529b\u691c\u8a3c\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-80\">\u843d\u3068\u3057\u7a744: \u672a\u691c\u8a3c\u306e\u65e5\u4ed8\u5165\u529b\u306b\u3088\u308b\u8106\u5f31\u6027<\/h4>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u5165\u529b\u3084\u5916\u90e8API\u304b\u3089\u306e\u30c7\u30fc\u30bf\u3092\u76f4\u63a5DateTime\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u6e21\u3059\u3068\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u30ea\u30b9\u30af\u304c\u751f\u3058\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u6d88\u8cbb\u653b\u6483\uff08\u5de8\u5927\u306a\u6570\u5024\u3092\u542b\u3080\u65e5\u4ed8\u6587\u5b57\u5217\uff09<\/li>\n\n\n\n<li>CPU\u4f7f\u7528\u7387\u653b\u6483\uff08\u8907\u96d1\u306a\u65e5\u4ed8\u8a08\u7b97\u3092\u5f15\u304d\u8d77\u3053\u3059\u6587\u5b57\u5217\uff09<\/li>\n\n\n\n<li>\u4e88\u671f\u3057\u306a\u3044\u65e5\u4ed8\u89e3\u91c8\u306b\u3088\u308b\u30ed\u30b8\u30c3\u30af\u306e\u4e0d\u5177\u5408<\/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=\"\">\/\/ \u5371\u967a\u306a\u4f8b\n$userInput = $_GET['date']; \/\/ \u4f8b: '2023-13-32' \u3084 '1970+9999999999 days'\n$date = new DateTime($userInput); \/\/ \u4f8b\u5916\u304c\u767a\u751f\u3059\u308b\u304b\u3001\u4e88\u671f\u3057\u306a\u3044\u65e5\u4ed8\u306b\u306a\u308b\u53ef\u80fd\u6027\n<\/pre>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u65e5\u4ed8\u5f62\u5f0f\u3092\u53b3\u5bc6\u306b\u691c\u8a3c\u3059\u308b\uff1a<\/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=\"\">$userInput = $_GET['date'] ?? '';\n\n\/\/ \u6b63\u898f\u8868\u73fe\u3067\u57fa\u672c\u7684\u306a\u5f62\u5f0f\u3092\u30c1\u30a7\u30c3\u30af\nif (!preg_match('\/^\\d{4}-\\d{2}-\\d{2}$\/', $userInput)) {\n    throw new InvalidArgumentException('\u7121\u52b9\u306a\u65e5\u4ed8\u5f62\u5f0f\u3067\u3059\u3002YYYY-MM-DD\u5f62\u5f0f\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\n}\n\n\/\/ \u65e5\u4ed8\u306e\u6709\u52b9\u6027\u3092\u78ba\u8a8d\uff08\u4f8b: 2023-02-31\u306f\u7121\u52b9\uff09\n$parts = explode('-', $userInput);\nif (!checkdate((int)$parts[1], (int)$parts[2], (int)$parts[0])) {\n    throw new InvalidArgumentException('\u5b58\u5728\u3057\u306a\u3044\u65e5\u4ed8\u3067\u3059\u3002');\n}\n\n\/\/ \u691c\u8a3c\u5f8c\u306b\u5b89\u5168\u306bDateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n$date = new DateTime($userInput);\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><code>createFromFormat()<\/code>\u3067\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u53b3\u5bc6\u306b\u6307\u5b9a\u3059\u308b\uff1a<\/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=\"\">$userInput = $_GET['date'] ?? '';\n\n\/\/ \u53b3\u5bc6\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u306e\u89e3\u6790\n$date = DateTime::createFromFormat('Y-m-d', $userInput);\n\n\/\/ \u89e3\u6790\u30a8\u30e9\u30fc\u3092\u30c1\u30a7\u30c3\u30af\nif ($date === false) {\n    $errors = DateTime::getLastErrors();\n    throw new InvalidArgumentException('\u65e5\u4ed8\u89e3\u6790\u30a8\u30e9\u30fc: ' . implode(', ', $errors['errors']));\n}\n\n\/\/ \u89e3\u6790\u306b\u306f\u6210\u529f\u3057\u305f\u304c\u8b66\u544a\u304c\u3042\u308b\u5834\u5408\u3082\u30c1\u30a7\u30c3\u30af\nif (!empty(DateTime::getLastErrors()['warnings'])) {\n    \/\/ \u8b66\u544a\u3092\u51e6\u7406\uff08\u30ed\u30b0\u306b\u8a18\u9332\u3059\u308b\u306a\u3069\uff09\n}\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30d5\u30a3\u30eb\u30bf\u3092\u4f7f\u7528\u3059\u308b\uff1a<\/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=\"\">\/\/ PHP\u306e\u30d5\u30a3\u30eb\u30bf\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066\u691c\u8a3c\n$options = [\n    'options' =&gt; [\n        'regexp' =&gt; '\/^\\d{4}-\\d{2}-\\d{2}$\/'\n    ]\n];\nif (filter_var($_GET['date'] ?? '', FILTER_VALIDATE_REGEXP, $options) === false) {\n    throw new InvalidArgumentException('\u7121\u52b9\u306a\u65e5\u4ed8\u5f62\u5f0f\u3067\u3059\u3002');\n}\n<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\uff1a<\/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=\"\">\/\/ Laravel\/Symfony\u306a\u3069\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u4f8b\n$validator = Validator::make($request-&gt;all(), [\n    'date' =&gt; 'required|date_format:Y-m-d|after:2000-01-01|before:2099-12-31',\n]);\n\nif ($validator-&gt;fails()) {\n    return redirect()-&gt;back()-&gt;withErrors($validator);\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-81\">PHP\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u4e92\u63db\u6027\u306e\u554f\u984c\u3068\u5bfe\u5fdc\u7b56<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-82\">\u843d\u3068\u3057\u7a745: \u7570\u306a\u308bPHP\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u6319\u52d5\u306e\u9055\u3044<\/h4>\n\n\n\n<p>PHP\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u3088\u3063\u3066\u3001DateTime\u30af\u30e9\u30b9\u306e\u6319\u52d5\u3084\u5229\u7528\u53ef\u80fd\u306a\u6a5f\u80fd\u306b\u9055\u3044\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<p>| \u6a5f\u80fd\/\u6319\u52d5 | PHP 5.x | PHP 7.x | PHP 8.x | |\u2014\u2014\u2014|\u2014\u2014\u2013|\u2014\u2013<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-83\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5b9f\u88c5\u4f8b<\/h2>\n\n\n\n<p>DateTime\u30af\u30e9\u30b9\u306e\u7406\u8ad6\u7684\u306a\u77e5\u8b58\u3092\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u6d3b\u7528\u3059\u308b\u305f\u3081\u3001\u5177\u4f53\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5b9f\u88c5\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u4f8b\u306f\u3001\u5b9f\u52d9\u3067\u983b\u7e41\u306b\u906d\u9047\u3059\u308b\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u30d1\u30bf\u30fc\u30f3\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306e\u30d2\u30f3\u30c8\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-84\">\u30ab\u30ec\u30f3\u30c0\u30fc\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u65e5\u4ed8\u51e6\u7406<\/h3>\n\n\n\n<p>\u30ab\u30ec\u30f3\u30c0\u30fc\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u6708\u8868\u793a\u306e\u751f\u6210\u3001\u30a4\u30d9\u30f3\u30c8\u7ba1\u7406\u3001\u7e70\u308a\u8fd4\u3057\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306e\u51e6\u7406\u306a\u3069\u3001\u69d8\u3005\u306a\u65e5\u4ed8\u64cd\u4f5c\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-85\">\u6708\u9593\u30ab\u30ec\u30f3\u30c0\u30fc\u306e\u751f\u6210<\/h4>\n\n\n\n<p>\u7279\u5b9a\u306e\u6708\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u3092\u751f\u6210\u3059\u308b\u30b3\u30fc\u30c9\u4f8b\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=\"\">\/**\n * \u6307\u5b9a\u3057\u305f\u5e74\u6708\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u30c7\u30fc\u30bf\u3092\u751f\u6210\u3059\u308b\n * \n * @param int $year \u5e74\n * @param int $month \u6708\n * @return array \u30ab\u30ec\u30f3\u30c0\u30fc\u30c7\u30fc\u30bf\uff08\u591a\u6b21\u5143\u914d\u5217\uff09\n *\/\nfunction generateMonthlyCalendar(int $year, int $month): array {\n    \/\/ \u6307\u5b9a\u3055\u308c\u305f\u5e74\u6708\u306e\u521d\u65e5\u3092\u53d6\u5f97\n    $firstDay = new DateTimeImmutable(\"$year-$month-01\");\n    \n    \/\/ \u6708\u306e\u6700\u7d42\u65e5\u3092\u53d6\u5f97\n    $lastDay = $firstDay-&gt;modify('last day of this month');\n    \n    \/\/ \u6708\u521d\u3081\u306e\u66dc\u65e5\uff080:\u65e5\u66dc\u65e5, 6:\u571f\u66dc\u65e5\uff09\n    $firstDayOfWeek = (int)$firstDay-&gt;format('w');\n    \n    \/\/ \u30ab\u30ec\u30f3\u30c0\u30fc\u306e\u6700\u521d\u306e\u65e5\uff08\u524d\u6708\u306e\u65e5\u3092\u542b\u3080\uff09\n    $calendarStart = $firstDay-&gt;modify(\"-{$firstDayOfWeek} days\");\n    \n    \/\/ \u9031\u3054\u3068\u306e2\u6b21\u5143\u914d\u5217\u3068\u3057\u3066\u30ab\u30ec\u30f3\u30c0\u30fc\u3092\u69cb\u7bc9\n    $calendar = [];\n    $currentDay = $calendarStart;\n    \n    \/\/ \u6700\u59276\u9031\u9593\u5206\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u3092\u751f\u6210\uff08\u6708\u306b\u3088\u3063\u30664\uff5e6\u9031\u9593\u306b\u306a\u308b\uff09\n    for ($week = 0; $week &lt; 6; $week++) {\n        $weekData = [];\n        \n        for ($dayOfWeek = 0; $dayOfWeek &lt; 7; $dayOfWeek++) {\n            $isCurrentMonth = $currentDay-&gt;format('m') == $month;\n            \n            $weekData[] = [\n                'date' =&gt; clone $currentDay,\n                'day' =&gt; (int)$currentDay-&gt;format('j'),\n                'isCurrentMonth' =&gt; $isCurrentMonth,\n                'isToday' =&gt; $currentDay-&gt;format('Y-m-d') === date('Y-m-d'),\n                'isWeekend' =&gt; in_array($dayOfWeek, [0, 6]), \/\/ \u571f\u65e5\u5224\u5b9a\n            ];\n            \n            $currentDay = $currentDay-&gt;modify('+1 day');\n        }\n        \n        $calendar[] = $weekData;\n        \n        \/\/ \u6708\u3092\u8d85\u3048\u305f\u9031\u306b\u9054\u3057\u305f\u3089\u7d42\u4e86\n        if ($currentDay-&gt;format('m') != $month &amp;&amp; $currentDay-&gt;format('w') == 0) {\n            break;\n        }\n    }\n    \n    return $calendar;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$calendar = generateMonthlyCalendar(2023, 7);\n\n\/\/ \u30ab\u30ec\u30f3\u30c0\u30fc\u306e\u8868\u793a\u4f8b\necho \"&lt;table border='1'&gt;\\n\";\necho \"&lt;tr&gt;&lt;th&gt;\u65e5&lt;\/th&gt;&lt;th&gt;\u6708&lt;\/th&gt;&lt;th&gt;\u706b&lt;\/th&gt;&lt;th&gt;\u6c34&lt;\/th&gt;&lt;th&gt;\u6728&lt;\/th&gt;&lt;th&gt;\u91d1&lt;\/th&gt;&lt;th&gt;\u571f&lt;\/th&gt;&lt;\/tr&gt;\\n\";\n\nforeach ($calendar as $week) {\n    echo \"&lt;tr&gt;\";\n    \n    foreach ($week as $day) {\n        $class = '';\n        if (!$day['isCurrentMonth']) {\n            $class .= 'other-month ';\n        }\n        if ($day['isToday']) {\n            $class .= 'today ';\n        }\n        if ($day['isWeekend']) {\n            $class .= 'weekend ';\n        }\n        \n        $class = $class ? \" class='$class'\" : '';\n        echo \"&lt;td$class&gt;{$day['day']}&lt;\/td&gt;\";\n    }\n    \n    echo \"&lt;\/tr&gt;\\n\";\n}\n\necho \"&lt;\/table&gt;\";\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-86\">\u7e70\u308a\u8fd4\u3057\u30a4\u30d9\u30f3\u30c8\u306e\u751f\u6210<\/h4>\n\n\n\n<p>\u9031\u6b21\u3001\u6708\u6b21\u3001\u5e74\u6b21\u306a\u3069\u306e\u7e70\u308a\u8fd4\u3057\u30a4\u30d9\u30f3\u30c8\u3092\u751f\u6210\u3059\u308b\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9\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=\"\">\/**\n * \u7e70\u308a\u8fd4\u3057\u30a4\u30d9\u30f3\u30c8\u3092\u7ba1\u7406\u3059\u308b\u30af\u30e9\u30b9\n *\/\nclass RecurringEventGenerator {\n    private DateTimeImmutable $startDate;\n    private ?DateTimeImmutable $endDate;\n    private string $frequency;\n    private int $interval;\n    private ?array $byDays;\n    \n    \/**\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n     * \n     * @param DateTimeImmutable $startDate \u958b\u59cb\u65e5\n     * @param DateTimeImmutable|null $endDate \u7d42\u4e86\u65e5\uff08null\u306e\u5834\u5408\u306f\u7121\u671f\u9650\uff09\n     * @param string $frequency \u983b\u5ea6\uff08daily, weekly, monthly, yearly\uff09\n     * @param int $interval \u9593\u9694\uff081=\u6bce\u9031\u30012=\u9694\u9031\u306a\u3069\uff09\n     * @param array|null $byDays \u7279\u5b9a\u306e\u66dc\u65e5\uff08weekly\u7528\u3001\u4f8b\uff1a['MO', 'WE', 'FR']\uff09\n     *\/\n    public function __construct(\n        DateTimeImmutable $startDate, \n        ?DateTimeImmutable $endDate = null, \n        string $frequency = 'weekly', \n        int $interval = 1, \n        ?array $byDays = null\n    ) {\n        $this-&gt;startDate = $startDate;\n        $this-&gt;endDate = $endDate;\n        $this-&gt;frequency = strtolower($frequency);\n        $this-&gt;interval = max(1, $interval);\n        $this-&gt;byDays = $byDays;\n    }\n    \n    \/**\n     * \u6307\u5b9a\u671f\u9593\u5185\u306e\u30a4\u30d9\u30f3\u30c8\u65e5\u3092\u751f\u6210\n     * \n     * @param DateTimeImmutable $rangeStart \u671f\u9593\u958b\u59cb\u65e5\n     * @param DateTimeImmutable $rangeEnd \u671f\u9593\u7d42\u4e86\u65e5\n     * @return array \u671f\u9593\u5185\u306e\u30a4\u30d9\u30f3\u30c8\u65e5\u306e\u914d\u5217\n     *\/\n    public function generateDatesInRange(\n        DateTimeImmutable $rangeStart, \n        DateTimeImmutable $rangeEnd\n    ): array {\n        $dates = [];\n        $currentDate = $this-&gt;startDate;\n        \n        \/\/ \u7d42\u4e86\u65e5\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u7bc4\u56f2\u306e\u7d42\u4e86\u65e5\u3092\u4f7f\u7528\n        $effectiveEndDate = $this-&gt;endDate ?? $rangeEnd;\n        \n        \/\/ \u7e70\u308a\u8fd4\u3057\u306e\u7a2e\u985e\u306b\u5fdc\u3058\u305f\u65e5\u4ed8\u306e\u5897\u5206\u65b9\u6cd5\n        $incrementMethod = match($this-&gt;frequency) {\n            'daily' =&gt; '+' . $this-&gt;interval . ' days',\n            'weekly' =&gt; '+' . $this-&gt;interval . ' weeks',\n            'monthly' =&gt; '+' . $this-&gt;interval . ' months',\n            'yearly' =&gt; '+' . $this-&gt;interval . ' years',\n            default =&gt; '+1 day', \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\n        };\n        \n        \/\/ \u7279\u5b9a\u306e\u66dc\u65e5\u6307\u5b9a\u304c\u3042\u308b\u5834\u5408\uff08\u9031\u6b21\u306e\u307f\uff09\n        $weekdayMap = [\n            'SU' =&gt; 0, 'MO' =&gt; 1, 'TU' =&gt; 2, 'WE' =&gt; 3, \n            'TH' =&gt; 4, 'FR' =&gt; 5, 'SA' =&gt; 6\n        ];\n        \n        $byDaysNumeric = [];\n        if ($this-&gt;frequency === 'weekly' &amp;&amp; $this-&gt;byDays) {\n            foreach ($this-&gt;byDays as $day) {\n                if (isset($weekdayMap[$day])) {\n                    $byDaysNumeric[] = $weekdayMap[$day];\n                }\n            }\n        }\n        \n        while ($currentDate &lt;= $effectiveEndDate) {\n            \/\/ \u7bc4\u56f2\u5185\u306e\u30a4\u30d9\u30f3\u30c8\u306e\u307f\u3092\u8ffd\u52a0\n            if ($currentDate &gt;= $rangeStart &amp;&amp; $currentDate &lt;= $rangeEnd) {\n                \/\/ \u9031\u6b21\u304b\u3064\u66dc\u65e5\u6307\u5b9a\u304c\u3042\u308b\u5834\u5408\n                if ($this-&gt;frequency === 'weekly' &amp;&amp; !empty($byDaysNumeric)) {\n                    $weekday = (int)$currentDate-&gt;format('w');\n                    if (in_array($weekday, $byDaysNumeric)) {\n                        $dates[] = clone $currentDate;\n                    }\n                } else {\n                    $dates[] = clone $currentDate;\n                }\n            }\n            \n            \/\/ \u6b21\u306e\u65e5\u4ed8\u3078\n            $currentDate = $currentDate-&gt;modify($incrementMethod);\n        }\n        \n        return $dates;\n    }\n    \n    \/**\n     * iCalendar\u5f62\u5f0f\u306eRRULE\u3092\u751f\u6210\n     * \n     * @return string RRULE\u6587\u5b57\u5217\n     *\/\n    public function toRrule(): string {\n        $rrule = \"FREQ=\" . strtoupper($this-&gt;frequency);\n        $rrule .= \";INTERVAL=\" . $this-&gt;interval;\n        \n        if ($this-&gt;byDays &amp;&amp; $this-&gt;frequency === 'weekly') {\n            $rrule .= \";BYDAY=\" . implode(',', $this-&gt;byDays);\n        }\n        \n        if ($this-&gt;endDate) {\n            $rrule .= \";UNTIL=\" . $this-&gt;endDate-&gt;format('Ymd\\THis\\Z');\n        }\n        \n        return $rrule;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$startDate = new DateTimeImmutable('2023-07-01');\n$endDate = new DateTimeImmutable('2023-12-31');\n\n\/\/ \u9694\u9031\u6708\u6c34\u91d1\u306e\u7e70\u308a\u8fd4\u3057\n$recurringEvent = new RecurringEventGenerator(\n    $startDate,\n    $endDate,\n    'weekly',\n    2, \/\/ \u9694\u9031\n    ['MO', 'WE', 'FR']\n);\n\n\/\/ 2023\u5e748\u6708\u306e\u5168\u3066\u306e\u30a4\u30d9\u30f3\u30c8\u65e5\u3092\u53d6\u5f97\n$augustStart = new DateTimeImmutable('2023-08-01');\n$augustEnd = new DateTimeImmutable('2023-08-31');\n$augustEvents = $recurringEvent-&gt;generateDatesInRange($augustStart, $augustEnd);\n\necho \"8\u6708\u306e\u30a4\u30d9\u30f3\u30c8\u65e5\uff1a\\n\";\nforeach ($augustEvents as $date) {\n    echo $date-&gt;format('Y-m-d (D)') . \"\\n\";\n}\n\n\/\/ iCalendar\u5f62\u5f0f\u306eRRULE\necho \"RRULE: \" . $recurringEvent-&gt;toRrule() . \"\\n\";\n\/\/ \u51fa\u529b\u4f8b: RRULE:FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE,FR;UNTIL=20231231T000000Z\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-87\">\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306b\u304a\u3051\u308b\u65e5\u6642\u51e6\u7406\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u30aa\u30f3\u30e9\u30a4\u30f3\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001\u5229\u7528\u53ef\u80fd\u306a\u6642\u9593\u67a0\u306e\u8a08\u7b97\u3084\u4e88\u7d04\u306e\u91cd\u8907\u30c1\u30a7\u30c3\u30af\u306a\u3069\u3001\u8907\u96d1\u306a\u65e5\u6642\u51e6\u7406\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-88\">\u4e88\u7d04\u53ef\u80fd\u306a\u6642\u9593\u67a0\u306e\u751f\u6210<\/h4>\n\n\n\n<p>\u55b6\u696d\u6642\u9593\u5185\u306e\u4e88\u7d04\u53ef\u80fd\u306a\u6642\u9593\u67a0\u3092\u751f\u6210\u3059\u308b\u4f8b\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=\"\">\/**\n * \u4e88\u7d04\u53ef\u80fd\u306a\u6642\u9593\u67a0\u3092\u751f\u6210\u3059\u308b\u30af\u30e9\u30b9\n *\/\nclass TimeSlotGenerator {\n    private DateTimeImmutable $date;\n    private DateTimeImmutable $openTime;\n    private DateTimeImmutable $closeTime;\n    private int $slotDurationMinutes;\n    private array $bookedSlots;\n    private array $breakTimes;\n    \n    \/**\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n     * \n     * @param DateTimeImmutable $date \u65e5\u4ed8\n     * @param string $openTime \u55b6\u696d\u958b\u59cb\u6642\u9593\uff08\u4f8b: '09:00'\uff09\n     * @param string $closeTime \u55b6\u696d\u7d42\u4e86\u6642\u9593\uff08\u4f8b: '17:00'\uff09\n     * @param int $slotDurationMinutes \u30b9\u30ed\u30c3\u30c8\u306e\u9577\u3055\uff08\u5206\uff09\n     * @param array $bookedSlots \u65e2\u306b\u4e88\u7d04\u6e08\u307f\u306e\u6642\u9593\u67a0 [['start' =&gt; DateTime, 'end' =&gt; DateTime], ...]\n     * @param array $breakTimes \u4f11\u61a9\u6642\u9593 [['start' =&gt; '12:00', 'end' =&gt; '13:00'], ...]\n     *\/\n    public function __construct(\n        DateTimeImmutable $date,\n        string $openTime,\n        string $closeTime,\n        int $slotDurationMinutes = 30,\n        array $bookedSlots = [],\n        array $breakTimes = []\n    ) {\n        $this-&gt;date = $date;\n        $this-&gt;openTime = $this-&gt;createDateTime($openTime);\n        $this-&gt;closeTime = $this-&gt;createDateTime($closeTime);\n        $this-&gt;slotDurationMinutes = $slotDurationMinutes;\n        $this-&gt;bookedSlots = $bookedSlots;\n        $this-&gt;breakTimes = array_map(\n            fn($break) =&gt; [\n                'start' =&gt; $this-&gt;createDateTime($break['start']),\n                'end' =&gt; $this-&gt;createDateTime($break['end'])\n            ],\n            $breakTimes\n        );\n    }\n    \n    \/**\n     * \u65e5\u4ed8\u3068\u6642\u9593\u6587\u5b57\u5217\u304b\u3089DateTimeImmutable\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n     *\/\n    private function createDateTime(string $time): DateTimeImmutable {\n        return new DateTimeImmutable(\n            $this-&gt;date-&gt;format('Y-m-d') . ' ' . $time\n        );\n    }\n    \n    \/**\n     * \u6307\u5b9a\u3055\u308c\u305f\u6642\u9593\u304c\u4e88\u7d04\u6e08\u307f\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n     *\/\n    private function isTimeBooked(DateTimeImmutable $start, DateTimeImmutable $end): bool {\n        foreach ($this-&gt;bookedSlots as $bookedSlot) {\n            \/\/ \u90e8\u5206\u7684\u306a\u91cd\u8907\u304c\u3042\u308b\u304b\u3092\u30c1\u30a7\u30c3\u30af\n            $bookedStart = $bookedSlot['start'];\n            $bookedEnd = $bookedSlot['end'];\n            \n            if (\n                ($start &lt; $bookedEnd &amp;&amp; $end &gt; $bookedStart) ||\n                ($start == $bookedStart &amp;&amp; $end == $bookedEnd)\n            ) {\n                return true;\n            }\n        }\n        \n        return false;\n    }\n    \n    \/**\n     * \u6307\u5b9a\u3055\u308c\u305f\u6642\u9593\u304c\u4f11\u61a9\u6642\u9593\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n     *\/\n    private function isBreakTime(DateTimeImmutable $start, DateTimeImmutable $end): bool {\n        foreach ($this-&gt;breakTimes as $breakTime) {\n            \/\/ \u90e8\u5206\u7684\u306a\u91cd\u8907\u304c\u3042\u308b\u304b\u3092\u30c1\u30a7\u30c3\u30af\n            if (\n                ($start &lt; $breakTime['end'] &amp;&amp; $end &gt; $breakTime['start']) ||\n                ($start == $breakTime['start'] &amp;&amp; $end == $breakTime['end'])\n            ) {\n                return true;\n            }\n        }\n        \n        return false;\n    }\n    \n    \/**\n     * \u5229\u7528\u53ef\u80fd\u306a\u5168\u3066\u306e\u6642\u9593\u67a0\u3092\u751f\u6210\n     * \n     * @return array \u5229\u7528\u53ef\u80fd\u306a\u6642\u9593\u67a0\u306e\u914d\u5217 [['start' =&gt; DateTime, 'end' =&gt; DateTime], ...]\n     *\/\n    public function generateAvailableTimeSlots(): array {\n        $availableSlots = [];\n        $currentTime = $this-&gt;openTime;\n        $slotInterval = new DateInterval(\"PT{$this-&gt;slotDurationMinutes}M\");\n        \n        while ($currentTime &lt; $this-&gt;closeTime) {\n            $slotEnd = $currentTime-&gt;add($slotInterval);\n            \n            \/\/ \u7d42\u4e86\u6642\u9593\u304c\u55b6\u696d\u6642\u9593\u3092\u8d85\u3048\u308b\u5834\u5408\u306f\u30b9\u30ad\u30c3\u30d7\n            if ($slotEnd &gt; $this-&gt;closeTime) {\n                break;\n            }\n            \n            \/\/ \u4e88\u7d04\u6e08\u307f\u3067\u306a\u304f\u3001\u4f11\u61a9\u6642\u9593\u3067\u3082\u306a\u3051\u308c\u3070\u5229\u7528\u53ef\u80fd\n            if (!$this-&gt;isTimeBooked($currentTime, $slotEnd) &amp;&amp; !$this-&gt;isBreakTime($currentTime, $slotEnd)) {\n                $availableSlots[] = [\n                    'start' =&gt; clone $currentTime,\n                    'end' =&gt; clone $slotEnd,\n                    'formatted' =&gt; $currentTime-&gt;format('H:i') . '-' . $slotEnd-&gt;format('H:i')\n                ];\n            }\n            \n            $currentTime = $slotEnd;\n        }\n        \n        return $availableSlots;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$date = new DateTimeImmutable('2023-07-15'); \/\/ \u571f\u66dc\u65e5\n\n\/\/ \u65e2\u306b\u4e88\u7d04\u6e08\u307f\u306e\u6642\u9593\u67a0\n$bookedSlots = [\n    [\n        'start' =&gt; new DateTime('2023-07-15 10:00:00'),\n        'end' =&gt; new DateTime('2023-07-15 11:00:00')\n    ],\n    [\n        'start' =&gt; new DateTime('2023-07-15 14:00:00'),\n        'end' =&gt; new DateTime('2023-07-15 15:00:00')\n    ]\n];\n\n\/\/ \u4f11\u61a9\u6642\u9593\n$breakTimes = [\n    [\n        'start' =&gt; '12:00',\n        'end' =&gt; '13:00'\n    ]\n];\n\n$generator = new TimeSlotGenerator(\n    $date,\n    '09:00',\n    '17:00',\n    30, \/\/ 30\u5206\u67a0\n    $bookedSlots,\n    $breakTimes\n);\n\n$availableSlots = $generator-&gt;generateAvailableTimeSlots();\n\necho \"\u5229\u7528\u53ef\u80fd\u306a\u6642\u9593\u67a0\uff1a\\n\";\nforeach ($availableSlots as $slot) {\n    echo $slot['formatted'] . \"\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-89\">\u4e88\u7d04\u306e\u6709\u52b9\u671f\u9650\u30c1\u30a7\u30c3\u30af<\/h4>\n\n\n\n<p>\u4e88\u7d04\u306e\u652f\u6255\u671f\u9650\u3084\u6709\u52b9\u671f\u9650\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u4f8b\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=\"\">\/**\n * \u4e88\u7d04\u306e\u6709\u52b9\u671f\u9650\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u30af\u30e9\u30b9\n *\/\nclass ReservationExpiryChecker {\n    \/**\n     * \u4e88\u7d04\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n     * \n     * @param array $reservation \u4e88\u7d04\u30c7\u30fc\u30bf\n     * @return bool \u6709\u52b9\u306a\u3089true\n     *\/\n    public static function isValid(array $reservation): bool {\n        $now = new DateTimeImmutable();\n        \n        \/\/ \u4e88\u7d04\u65e5\u6642\n        $reservationDate = new DateTimeImmutable($reservation['date'] . ' ' . $reservation['time']);\n        \n        \/\/ \u4e88\u7d04\u65e5\u6642\u304c\u904e\u53bb\u306e\u5834\u5408\u306f\u7121\u52b9\n        if ($reservationDate &lt; $now) {\n            return false;\n        }\n        \n        \/\/ \u652f\u6255\u3044\u304c\u5fc5\u8981\u3067\u3001\u652f\u6255\u671f\u9650\u304c\u904e\u304e\u3066\u3044\u308b\u5834\u5408\u306f\u7121\u52b9\n        if (\n            $reservation['payment_required'] &amp;&amp; \n            !$reservation['payment_completed'] &amp;&amp; \n            isset($reservation['payment_due'])\n        ) {\n            $paymentDue = new DateTimeImmutable($reservation['payment_due']);\n            if ($now &gt; $paymentDue) {\n                return false;\n            }\n        }\n        \n        return true;\n    }\n    \n    \/**\n     * \u4e88\u7d04\u306e\u652f\u6255\u671f\u9650\u3092\u8a08\u7b97\n     * \n     * @param DateTimeInterface $reservationDate \u4e88\u7d04\u65e5\u6642\n     * @param int $hoursBeforeReservation \u4e88\u7d04\u524d\u306e\u4f55\u6642\u9593\u524d\u304c\u652f\u6255\u671f\u9650\u304b\n     * @return DateTimeImmutable \u652f\u6255\u671f\u9650\n     *\/\n    public static function calculatePaymentDue(\n        DateTimeInterface $reservationDate,\n        int $hoursBeforeReservation = 24\n    ): DateTimeImmutable {\n        \/\/ \u4e88\u7d04\u65e5\u6642\u304b\u3089x\u6642\u9593\u524d\u3092\u8a08\u7b97\n        $reservationDateTime = DateTimeImmutable::createFromInterface($reservationDate);\n        return $reservationDateTime-&gt;modify(\"-{$hoursBeforeReservation} hours\");\n    }\n    \n    \/**\n     * \u4e88\u7d04\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u53ef\u80fd\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n     * \n     * @param DateTimeInterface $reservationDate \u4e88\u7d04\u65e5\u6642\n     * @param int $hoursCancellationDeadline \u30ad\u30e3\u30f3\u30bb\u30eb\u53ef\u80fd\u306a\u4e88\u7d04\u524d\u306e\u6642\u9593\u6570\n     * @return bool \u30ad\u30e3\u30f3\u30bb\u30eb\u53ef\u80fd\u306a\u3089true\n     *\/\n    public static function canBeCancelled(\n        DateTimeInterface $reservationDate,\n        int $hoursCancellationDeadline = 48\n    ): bool {\n        $now = new DateTimeImmutable();\n        $cancellationDeadline = DateTimeImmutable::createFromInterface($reservationDate)\n            -&gt;modify(\"-{$hoursCancellationDeadline} hours\");\n            \n        return $now &lt; $cancellationDeadline;\n    }\n    \n    \/**\n     * \u4e88\u7d04\u306e\u6b8b\u308a\u6642\u9593\u3092\u4eba\u9593\u304c\u8aad\u3081\u308b\u5f62\u5f0f\u3067\u53d6\u5f97\n     * \n     * @param DateTimeInterface $reservationDate \u4e88\u7d04\u65e5\u6642\n     * @return string \u6b8b\u308a\u6642\u9593\u306e\u6587\u5b57\u5217\uff08\u4f8b: \"2\u65e5\u30683\u6642\u9593\"\uff09\n     *\/\n    public static function getTimeRemaining(DateTimeInterface $reservationDate): string {\n        $now = new DateTimeImmutable();\n        $reservation = DateTimeImmutable::createFromInterface($reservationDate);\n        \n        if ($now &gt; $reservation) {\n            return '\u4e88\u7d04\u6642\u9593\u3092\u904e\u304e\u3066\u3044\u307e\u3059';\n        }\n        \n        $interval = $now-&gt;diff($reservation);\n        \n        $parts = [];\n        if ($interval-&gt;y &gt; 0) {\n            $parts[] = $interval-&gt;y . '\u5e74';\n        }\n        if ($interval-&gt;m &gt; 0) {\n            $parts[] = $interval-&gt;m . '\u30f6\u6708';\n        }\n        if ($interval-&gt;d &gt; 0) {\n            $parts[] = $interval-&gt;d . '\u65e5';\n        }\n        if ($interval-&gt;h &gt; 0) {\n            $parts[] = $interval-&gt;h . '\u6642\u9593';\n        }\n        if ($interval-&gt;i &gt; 0 &amp;&amp; count($parts) &lt; 2) {\n            $parts[] = $interval-&gt;i . '\u5206';\n        }\n        \n        return implode('\u3068', $parts);\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$reservation = [\n    'id' =&gt; 123,\n    'customer_name' =&gt; '\u5c71\u7530\u592a\u90ce',\n    'date' =&gt; '2023-07-20',\n    'time' =&gt; '15:00:00',\n    'payment_required' =&gt; true,\n    'payment_completed' =&gt; false,\n    'payment_due' =&gt; '2023-07-19 15:00:00'\n];\n\n\/\/ \u4e88\u7d04\u306e\u6709\u52b9\u6027\u3092\u30c1\u30a7\u30c3\u30af\nif (ReservationExpiryChecker::isValid($reservation)) {\n    echo \"\u4e88\u7d04\u306f\u6709\u52b9\u3067\u3059\u3002\\n\";\n} else {\n    echo \"\u4e88\u7d04\u306f\u7121\u52b9\u307e\u305f\u306f\u671f\u9650\u5207\u308c\u3067\u3059\u3002\\n\";\n}\n\n\/\/ \u65b0\u3057\u3044\u4e88\u7d04\u306e\u652f\u6255\u671f\u9650\u3092\u8a08\u7b97\n$newReservationDate = new DateTime('2023-08-01 10:00:00');\n$paymentDue = ReservationExpiryChecker::calculatePaymentDue($newReservationDate, 48);\necho \"\u652f\u6255\u671f\u9650: \" . $paymentDue-&gt;format('Y-m-d H:i:s') . \"\\n\";\n\n\/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u53ef\u80fd\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\nif (ReservationExpiryChecker::canBeCancelled($newReservationDate)) {\n    echo \"\u3053\u306e\u4e88\u7d04\u306f\u30ad\u30e3\u30f3\u30bb\u30eb\u53ef\u80fd\u3067\u3059\u3002\\n\";\n} else {\n    echo \"\u30ad\u30e3\u30f3\u30bb\u30eb\u671f\u9650\u3092\u904e\u304e\u3066\u3044\u307e\u3059\u3002\\n\";\n}\n\n\/\/ \u4e88\u7d04\u307e\u3067\u306e\u6b8b\u308a\u6642\u9593\u3092\u8868\u793a\necho \"\u4e88\u7d04\u307e\u3067\u3042\u3068: \" . ReservationExpiryChecker::getTimeRemaining($newReservationDate) . \"\\n\";\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-90\">\u30ed\u30b0\u89e3\u6790\u3068\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790\u3084\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u306e\u51e6\u7406\u306f\u3001\u591a\u304f\u306e\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u91cd\u8981\u306a\u6a5f\u80fd\u3067\u3059\u3002DateTime\u30af\u30e9\u30b9\u3092\u6d3b\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-91\">\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u306e\u6642\u9593\u5e2f\u5225\u96c6\u8a08<\/h4>\n\n\n\n<p>Web\u30b5\u30fc\u30d0\u30fc\u306e\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u3092\u6642\u9593\u5e2f\u5225\u306b\u96c6\u8a08\u3059\u308b\u4f8b\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=\"\">\/**\n * \u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u3092\u89e3\u6790\u3059\u308b\u30af\u30e9\u30b9\n *\/\nclass AccessLogAnalyzer {\n    private string $logFile;\n    private string $datePattern;\n    \n    \/**\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n     * \n     * @param string $logFile \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\n     * @param string $datePattern \u30ed\u30b0\u5185\u306e\u65e5\u4ed8\u30d1\u30bf\u30fc\u30f3\uff08\u6b63\u898f\u8868\u73fe\uff09\n     *\/\n    public function __construct(string $logFile, string $datePattern = '\/\\[(.*?)\\]\/') {\n        $this-&gt;logFile = $logFile;\n        $this-&gt;datePattern = $datePattern;\n    }\n    \n    \/**\n     * \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u65e5\u4ed8\u3092\u62bd\u51fa\n     * \n     * @return array \u62bd\u51fa\u3055\u308c\u305f\u65e5\u4ed8\u306e\u914d\u5217\n     *\/\n    private function extractDatesFromLog(): array {\n        $dates = [];\n        $handle = fopen($this-&gt;logFile, 'r');\n        \n        if ($handle) {\n            while (($line = fgets($handle)) !== false) {\n                if (preg_match($this-&gt;datePattern, $line, $matches)) {\n                    \/\/ Apache\/Nginx\u306e\u4e00\u822c\u7684\u306a\u30ed\u30b0\u5f62\u5f0f: [day\/month\/year:hour:minute:second zone]\n                    $dateStr = $matches[1];\n                    try {\n                        \/\/ \u30ed\u30b0\u306e\u65e5\u4ed8\u5f62\u5f0f\u3092\u30d1\u30fc\u30b9\n                        $date = DateTimeImmutable::createFromFormat('d\/M\/Y:H:i:s O', $dateStr);\n                        if ($date !== false) {\n                            $dates[] = $date;\n                        }\n                    } catch (Exception $e) {\n                        \/\/ \u65e5\u4ed8\u306e\u30d1\u30fc\u30b9\u306b\u5931\u6557\u3057\u305f\u5834\u5408\u306f\u30b9\u30ad\u30c3\u30d7\n                        continue;\n                    }\n                }\n            }\n            fclose($handle);\n        }\n        \n        return $dates;\n    }\n    \n    \/**\n     * \u6642\u9593\u5e2f\u5225\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u96c6\u8a08\n     * \n     * @return array \u6642\u9593\u5e2f\u5225\u306e\u30a2\u30af\u30bb\u30b9\u6570\n     *\/\n    public function getHourlyDistribution(): array {\n        $dates = $this-&gt;extractDatesFromLog();\n        $hourlyDistribution = array_fill(0, 24, 0);\n        \n        foreach ($dates as $date) {\n            $hour = (int)$date-&gt;format('G'); \/\/ 0-23\u306e\u6642\u9593\n            $hourlyDistribution[$hour]++;\n        }\n        \n        return $hourlyDistribution;\n    }\n    \n    \/**\n     * \u66dc\u65e5\u5225\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u96c6\u8a08\n     * \n     * @return array \u66dc\u65e5\u5225\u306e\u30a2\u30af\u30bb\u30b9\u6570\n     *\/\n    public function getDailyDistribution(): array {\n        $dates = $this-&gt;extractDatesFromLog();\n        $dailyDistribution = array_fill(0, 7, 0);\n        \n        foreach ($dates as $date) {\n            $dayOfWeek = (int)$date-&gt;format('w'); \/\/ 0\uff08\u65e5\u66dc\uff09\u304b\u30896\uff08\u571f\u66dc\uff09\n            $dailyDistribution[$dayOfWeek]++;\n        }\n        \n        return $dailyDistribution;\n    }\n    \n    \/**\n     * \u65e5\u4ed8\u7bc4\u56f2\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30a2\u30af\u30bb\u30b9\u6570\u3092\u53d6\u5f97\n     * \n     * @param DateTimeInterface $start \u958b\u59cb\u65e5\u6642\n     * @param DateTimeInterface $end \u7d42\u4e86\u65e5\u6642\n     * @return int \u30a2\u30af\u30bb\u30b9\u6570\n     *\/\n    public function getAccessCountInDateRange(\n        DateTimeInterface $start,\n        DateTimeInterface $end\n    ): int {\n        $dates = $this-&gt;extractDatesFromLog();\n        $count = 0;\n        \n        foreach ($dates as $date) {\n            if ($date &gt;= $start &amp;&amp; $date &lt;= $end) {\n                $count++;\n            }\n        }\n        \n        return $count;\n    }\n    \n    \/**\n     * \u30d4\u30fc\u30af\u6642\u9593\u5e2f\u3092\u7279\u5b9a\n     * \n     * @param int $windowHours \u96c6\u8a08\u3059\u308b\u6642\u9593\u67a0\uff08\u30c7\u30d5\u30a9\u30eb\u30c81\u6642\u9593\uff09\n     * @return array \u30d4\u30fc\u30af\u6642\u9593\u5e2f\u306e\u60c5\u5831\n     *\/\n    public function findPeakHours(int $windowHours = 1): array {\n        $dates = $this-&gt;extractDatesFromLog();\n        \n        \/\/ \u65e5\u4ed8\u3054\u3068\u306b\u6642\u9593\u5e2f\u5225\u30a2\u30af\u30bb\u30b9\u6570\u3092\u96c6\u8a08\n        $hourlyCountsByDate = [];\n        \n        foreach ($dates as $date) {\n            $dateKey = $date-&gt;format('Y-m-d');\n            $hourKey = (int)$date-&gt;format('G'); \/\/ 0-23\n            \n            if (!isset($hourlyCountsByDate[$dateKey])) {\n                $hourlyCountsByDate[$dateKey] = array_fill(0, 24, 0);\n            }\n            \n            $hourlyCountsByDate[$dateKey][$hourKey]++;\n        }\n        \n        \/\/ \u5404\u65e5\u4ed8\u3054\u3068\u306b\u30d4\u30fc\u30af\u6642\u9593\u5e2f\u3092\u7279\u5b9a\n        $peaksByDate = [];\n        \n        foreach ($hourlyCountsByDate as $date =&gt; $hourlyCounts) {\n            $maxCount = 0;\n            $peakHour = 0;\n            \n            for ($hour = 0; $hour &lt; 24; $hour++) {\n                $count = 0;\n                \n                \/\/ \u6307\u5b9a\u3055\u308c\u305f\u6642\u9593\u67a0\u5185\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u5408\u8a08\n                for ($i = 0; $i &lt; $windowHours; $i++) {\n                    $h = ($hour + $i) % 24;\n                    $count += $hourlyCounts[$h];\n                }\n                \n                if ($count &gt; $maxCount) {\n                    $maxCount = $count;\n                    $peakHour = $hour;\n                }\n            }\n            \n            $peaksByDate[$date] = [\n                'peak_hour_start' =&gt; $peakHour,\n                'peak_hour_end' =&gt; ($peakHour + $windowHours) % 24,\n                'access_count' =&gt; $maxCount\n            ];\n        }\n        \n        return $peaksByDate;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$logAnalyzer = new AccessLogAnalyzer('\/var\/log\/apache2\/access.log');\n\n\/\/ \u6642\u9593\u5e2f\u5225\u306e\u30a2\u30af\u30bb\u30b9\u5206\u5e03\u3092\u53d6\u5f97\n$hourlyDistribution = $logAnalyzer-&gt;getHourlyDistribution();\necho \"\u6642\u9593\u5e2f\u5225\u30a2\u30af\u30bb\u30b9\u6570\uff1a\\n\";\nforeach ($hourlyDistribution as $hour =&gt; $count) {\n    echo sprintf(\"%02d:00 - %02d:00: %d\\n\", $hour, ($hour + 1) % 24, $count);\n}\n\n\/\/ \u66dc\u65e5\u5225\u306e\u30a2\u30af\u30bb\u30b9\u5206\u5e03\u3092\u53d6\u5f97\n$dailyDistribution = $logAnalyzer-&gt;getDailyDistribution();\n$dayNames = ['\u65e5', '\u6708', '\u706b', '\u6c34', '\u6728', '\u91d1', '\u571f'];\necho \"\\n\u66dc\u65e5\u5225\u30a2\u30af\u30bb\u30b9\u6570\uff1a\\n\";\nforeach ($dailyDistribution as $day =&gt; $count) {\n    echo $dayNames[$day] . \"\u66dc\u65e5: \" . $count . \"\\n\";\n}\n\n\/\/ \u7279\u5b9a\u306e\u65e5\u6642\u7bc4\u56f2\u3067\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u53d6\u5f97\n$startDate = new DateTime('2023-07-01 00:00:00');\n$endDate = new DateTime('2023-07-31 23:59:59');\n$count = $logAnalyzer-&gt;getAccessCountInDateRange($startDate, $endDate);\necho \"\\n7\u6708\u306e\u30a2\u30af\u30bb\u30b9\u6570: \" . $count . \"\\n\";\n\n\/\/ \u30d4\u30fc\u30af\u6642\u9593\u5e2f\u3092\u7279\u5b9a\uff082\u6642\u9593\u67a0\uff09\n$peakHours = $logAnalyzer-&gt;findPeakHours(2);\necho \"\\n\u65e5\u4ed8\u5225\u30d4\u30fc\u30af\u6642\u9593\u5e2f\uff082\u6642\u9593\u67a0\uff09\uff1a\\n\";\nforeach ($peakHours as $date =&gt; $peak) {\n    echo $date . \": \" . \n         sprintf(\"%02d:00 - %02d:00\", $peak['peak_hour_start'], $peak['peak_hour_end']) . \n         \"\uff08\" . $peak['access_count'] . \"\u30a2\u30af\u30bb\u30b9\uff09\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-92\">\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u306e\u52b9\u7387\u7684\u306a\u96c6\u8a08<\/h4>\n\n\n\n<p>\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\uff08\u4f8b\uff1a\u30bb\u30f3\u30b5\u30fc\u6e2c\u5b9a\u5024\u3001\u682a\u4fa1\u306a\u3069\uff09\u3092\u671f\u9593\u3054\u3068\u306b\u96c6\u8a08\u3059\u308b\u4f8b\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=\"\">\/**\n * \u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u30af\u30e9\u30b9\n *\/\nclass TimeSeriesDataProcessor {\n    private array $data;\n    \n    \/**\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n     * \n     * @param array $data \u6642\u7cfb\u5217\u30c7\u30fc\u30bf [['timestamp' =&gt; DateTime, 'value' =&gt; float], ...]\n     *\/\n    public function __construct(array $data) {\n        $this-&gt;data = $data;\n    }\n    \n    \/**\n     * \u30c7\u30fc\u30bf\u3092\u65e5\u5358\u4f4d\u3067\u96c6\u8a08\n     * \n     * @param string $aggregationType \u96c6\u8a08\u30bf\u30a4\u30d7\uff08'sum', 'avg', 'min', 'max'\uff09\n     * @return array \u96c6\u8a08\u7d50\u679c ['2023-07-01' =&gt; 123.45, ...]\n     *\/\n    public function aggregateByDay(string $aggregationType = 'avg'): array {\n        $aggregatedData = [];\n        \n        foreach ($this-&gt;data as $point) {\n            $date = $point['timestamp']-&gt;format('Y-m-d');\n            \n            if (!isset($aggregatedData[$date])) {\n                $aggregatedData[$date] = [\n                    'sum' =&gt; 0,\n                    'count' =&gt; 0,\n                    'min' =&gt; PHP_FLOAT_MAX,\n                    'max' =&gt; PHP_FLOAT_MIN\n                ];\n            }\n            \n            $aggregatedData[$date]['sum'] += $point['value'];\n            $aggregatedData[$date]['count']++;\n            $aggregatedData[$date]['min'] = min($aggregatedData[$date]['min'], $point['value']);\n            $aggregatedData[$date]['max'] = max($aggregatedData[$date]['max'], $point['value']);\n        }\n        \n        \/\/ \u96c6\u8a08\u30bf\u30a4\u30d7\u306b\u57fa\u3065\u3044\u3066\u7d50\u679c\u3092\u8a08\u7b97\n        $result = [];\n        foreach ($aggregatedData as $date =&gt; $stats) {\n            switch ($aggregationType) {\n                case 'sum':\n                    $result[$date] = $stats['sum'];\n                    break;\n                case 'avg':\n                    $result[$date] = $stats['sum'] \/ $stats['count'];\n                    break;\n                case 'min':\n                    $result[$date] = $stats['min'];\n                    break;\n                case 'max':\n                    $result[$date] = $stats['max'];\n                    break;\n                default:\n                    $result[$date] = $stats['sum'] \/ $stats['count']; \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306f\u5e73\u5747\n            }\n        }\n        \n        return $result;\n    }\n    \n    \/**\n     * \u30ab\u30b9\u30bf\u30e0\u671f\u9593\u3067\u30c7\u30fc\u30bf\u3092\u96c6\u8a08\n     * \n     * @param string $period \u671f\u9593\uff08'hourly', 'daily', 'weekly', 'monthly', 'yearly'\uff09\n     * @param string $aggregationType \u96c6\u8a08\u30bf\u30a4\u30d7\uff08'sum', 'avg', 'min', 'max'\uff09\n     * @return array \u96c6\u8a08\u7d50\u679c\n     *\/\n    public function aggregateByPeriod(\n        string $period = 'daily',\n        string $aggregationType = 'avg'\n    ): array {\n        $aggregatedData = [];\n        \n        $formatPattern = match($period) {\n            'hourly' =&gt; 'Y-m-d H:00',\n            'daily' =&gt; 'Y-m-d',\n            'weekly' =&gt; 'Y-W', \/\/ ISO\u9031\u756a\u53f7\n            'monthly' =&gt; 'Y-m',\n            'yearly' =&gt; 'Y',\n            default =&gt; 'Y-m-d'\n        };\n        \n        foreach ($this-&gt;data as $point) {\n            $periodKey = $point['timestamp']-&gt;format($formatPattern);\n            \n            if (!isset($aggregatedData[$periodKey])) {\n                $aggregatedData[$periodKey] = [\n                    'sum' =&gt; 0,\n                    'count' =&gt; 0,\n                    'min' =&gt; PHP_FLOAT_MAX,\n                    'max' =&gt; PHP_FLOAT_MIN\n                ];\n            }\n            \n            $aggregatedData[$periodKey]['sum'] += $point['value'];\n            $aggregatedData[$periodKey]['count']++;\n            $aggregatedData[$periodKey]['min'] = min($aggregatedData[$periodKey]['min'], $point['value']);\n            $aggregatedData[$periodKey]['max'] = max($aggregatedData[$periodKey]['max'], $point['value']);\n        }\n        \n        \/\/ \u96c6\u8a08\u30bf\u30a4\u30d7\u306b\u57fa\u3065\u3044\u3066\u7d50\u679c\u3092\u8a08\u7b97\n        $result = [];\n        foreach ($aggregatedData as $periodKey =&gt; $stats) {\n            switch ($aggregationType) {\n                case 'sum':\n                    $result[$periodKey] = $stats['sum'];\n                    break;\n                case 'avg':\n                    $result[$periodKey] = $stats['sum'] \/ $stats['count'];\n                    break;\n                case 'min':\n                    $result[$periodKey] = $stats['min'];\n                    break;\n                case 'max':\n                    $result[$periodKey] = $stats['max'];\n                    break;\n                default:\n                    $result[$periodKey] = $stats['sum'] \/ $stats['count']; \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306f\u5e73\u5747\n            }\n        }\n        \n        return $result;\n    }\n    \n    \/**\n     * \u79fb\u52d5\u5e73\u5747\u3092\u8a08\u7b97\n     * \n     * @param int $windowSize \u30a6\u30a3\u30f3\u30c9\u30a6\u30b5\u30a4\u30ba\uff08\u30c7\u30fc\u30bf\u30dd\u30a4\u30f3\u30c8\u6570\uff09\n     * @return array \u79fb\u52d5\u5e73\u5747\u7d50\u679c [['timestamp' =&gt; DateTime, 'value' =&gt; float], ...]\n     *\/\n    public function calculateMovingAverage(int $windowSize = 5): array {\n        $result = [];\n        $dataCount = count($this-&gt;data);\n        \n        if ($dataCount &lt; $windowSize) {\n            return $result; \/\/ \u5341\u5206\u306a\u30c7\u30fc\u30bf\u30dd\u30a4\u30f3\u30c8\u304c\u306a\u3044\u5834\u5408\n        }\n        \n        \/\/ \u30c7\u30fc\u30bf\u3092\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3067\u30bd\u30fc\u30c8\n        usort($this-&gt;data, function ($a, $b) {\n            return $a['timestamp'] &lt;=&gt; $b['timestamp'];\n        });\n        \n        for ($i = $windowSize - 1; $i &lt; $dataCount; $i++) {\n            $sum = 0;\n            \n            for ($j = 0; $j &lt; $windowSize; $j++) {\n                $sum += $this-&gt;data[$i - $j]['value'];\n            }\n            \n            $result[] = [\n                'timestamp' =&gt; clone $this-&gt;data[$i]['timestamp'],\n                'value' =&gt; $sum \/ $windowSize\n            ];\n        }\n        \n        return $result;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b: \u6e29\u5ea6\u30bb\u30f3\u30b5\u30fc\u306e\u30c7\u30fc\u30bf\n$temperatureData = [];\n\n\/\/ \u30b5\u30f3\u30d7\u30eb\u30c7\u30fc\u30bf\u306e\u751f\u6210\n$startDate = new DateTime('2023-07-01');\nfor ($i = 0; $i &lt; 30 * 24; $i++) { \/\/ 30\u65e5\u9593\u30011\u6642\u9593\u3054\u3068\n    $timestamp = clone $startDate;\n    $timestamp-&gt;modify(\"+{$i} hours\");\n    \n    \/\/ \u7c21\u5358\u306a\u6e29\u5ea6\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\uff08\u663c\u9593\u306f\u9ad8\u304f\u3001\u591c\u9593\u306f\u4f4e\u304f\uff09\n    $hour = (int)$timestamp-&gt;format('G');\n    $baseTemp = 20;\n    $dayFactor = sin(($hour - 6) * M_PI \/ 12); \/\/ 6\u6642\u306b\u6700\u4f4e\u300118\u6642\u306b\u6700\u9ad8\n    $temperature = $baseTemp + 5 * $dayFactor + mt_rand(-2, 2); \/\/ \u30e9\u30f3\u30c0\u30e0\u8981\u7d20\u3092\u8ffd\u52a0\n    \n    $temperatureData[] = [\n        'timestamp' =&gt; $timestamp,\n        'value' =&gt; $temperature\n    ];\n}\n\n$processor = new TimeSeriesDataProcessor($temperatureData);\n\n\/\/ \u65e5\u3054\u3068\u306e\u5e73\u5747\u6e29\u5ea6\u3092\u53d6\u5f97\n$dailyAvg = $processor-&gt;aggregateByDay('avg');\necho \"\u65e5\u3054\u3068\u306e\u5e73\u5747\u6e29\u5ea6\uff1a\\n\";\nforeach (array_slice($dailyAvg, 0, 5) as $date =&gt; $avg) { \/\/ \u6700\u521d\u306e5\u65e5\u9593\u306e\u307f\u8868\u793a\n    echo $date . \": \" . round($avg, 1) . \"\u00b0C\\n\";\n}\n\n\/\/ \u9031\u3054\u3068\u306e\u6700\u9ad8\u6e29\u5ea6\u3092\u53d6\u5f97\n$weeklyMax = $processor-&gt;aggregateByPeriod('weekly', 'max');\necho \"\\n\u9031\u3054\u3068\u306e\u6700\u9ad8\u6e29\u5ea6\uff1a\\n\";\nforeach ($weeklyMax as $week =&gt; $max) {\n    echo $week . \"\u9031: \" . round($max, 1) . \"\u00b0C\\n\";\n}\n\n\/\/ 5\u30dd\u30a4\u30f3\u30c8\u79fb\u52d5\u5e73\u5747\u3092\u8a08\u7b97\n$movingAvg = $processor-&gt;calculateMovingAverage(5);\necho \"\\n\u79fb\u52d5\u5e73\u5747\uff08\u6700\u521d\u306e5\u30dd\u30a4\u30f3\u30c8\uff09\uff1a\\n\";\nforeach (array_slice($movingAvg, 0, 5) as $point) {\n    echo $point['timestamp']-&gt;format('Y-m-d H:i') . \": \" . round($point['value'], 1) . \"\u00b0C\\n\";\n}\n<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5b9f\u88c5\u4f8b\u3092\u53c2\u8003\u306b\u3001PHP\u306eDateTime\u30af\u30e9\u30b9\u3092\u6d3b\u7528\u3057\u3066\u69d8\u3005\u306a\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u8ab2\u984c\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u307e\u3067\u306e\u5185\u5bb9\u3092\u7dcf\u62ec\u3057\u3001\u3088\u308a\u9ad8\u5ea6\u306aDateTime\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-93\">\u307e\u3068\u3081\u3068\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-94\">DateTime\u6d3b\u7528\u306e\u305f\u3081\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8\u7dcf\u62ec<\/h3>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001PHP\u306eDateTime\u30af\u30e9\u30b9\u306b\u3064\u3044\u3066\u3001\u57fa\u672c\u6982\u5ff5\u304b\u3089\u5fdc\u7528\u30c6\u30af\u30cb\u30c3\u30af\u3001\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u307e\u3067\u5e45\u5e83\u304f\u89e3\u8aac\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u3053\u3053\u3067\u3001DateTime\u30af\u30e9\u30b9\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u3092\u7dcf\u62ec\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-95\">1. \u57fa\u672c\u7684\u306a\u8a2d\u8a08\u539f\u5247<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5e38\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u660e\u793a\u3059\u308b<\/strong>\uff1a DateTime\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u969b\u306f\u3001\u5e38\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3057\u307e\u3057\u3087\u3046\u3002\u3053\u308c\u306b\u3088\u308a\u4e88\u671f\u3057\u306a\u3044\u52d5\u4f5c\u3092\u9632\u6b62\u3067\u304d\u307e\u3059\u3002 <code>\/\/ \u63a8\u5968\u3055\u308c\u308b\u4f7f\u3044\u65b9 $date = new DateTime('2023-07-15', new DateTimeZone('UTC')); $date = new DateTime('2023-07-15', new DateTimeZone('Asia\/Tokyo'));<\/code><\/li>\n\n\n\n<li><strong>DateTimeImmutable\u3092\u512a\u5148\u7684\u306b\u4f7f\u7528\u3059\u308b<\/strong>\uff1a \u7279\u306b\u7406\u7531\u304c\u306a\u3051\u308c\u3070\u3001\u6a19\u6e96\u306eDateTime\u30af\u30e9\u30b9\u3088\u308a\u526f\u4f5c\u7528\u3092\u9632\u6b62\u3067\u304d\u308bDateTimeImmutable\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002 <code>\/\/ \u63a8\u5968\u3055\u308c\u308b\u4f7f\u3044\u65b9 $date = new DateTimeImmutable('2023-07-15'); $newDate = $date-&gt;modify('+1 day'); \/\/ \u5143\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u5909\u66f4\u3055\u308c\u306a\u3044<\/code><\/li>\n\n\n\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u306fUTC\u3092\u4f7f\u7528\u3059\u308b<\/strong>\uff1a \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u65e5\u6642\u3092\u4fdd\u5b58\u3059\u308b\u969b\u306f\u3001\u5e38\u306bUTC\uff08\u5354\u5b9a\u4e16\u754c\u6642\uff09\u3092\u4f7f\u7528\u3057\u3001\u8868\u793a\u6642\u306b\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5909\u63db\u3059\u308b\u30d1\u30bf\u30fc\u30f3\u3092\u63a1\u7528\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-96\">2. \u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u65e5\u4ed8\u8868\u793a<\/strong>\uff1a \u65e5\u4ed8\u3092\u8868\u793a\u3059\u308b\u969b\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30b1\u30fc\u30eb\u3084\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5408\u308f\u305b\u305f\u5f62\u5f0f\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 <code>$date = new DateTime('2023-07-15'); $date-&gt;setTimezone(new DateTimeZone($userTimezone)); echo $date-&gt;format($userDateFormat);<\/code><\/li>\n\n\n\n<li><strong>\u65e5\u4ed8\u306e\u5dee\u5206\u8a08\u7b97<\/strong>\uff1a 2\u3064\u306e\u65e5\u4ed8\u306e\u5dee\u3092\u8a08\u7b97\u3059\u308b\u969b\u306f\u3001<code>diff()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 <code>$date1 = new DateTime('2023-01-01'); $date2 = new DateTime('2023-12-31'); $interval = $date1-&gt;diff($date2); echo \"\u5dee: {$interval-&gt;y}\u5e74 {$interval-&gt;m}\u6708 {$interval-&gt;d}\u65e5\";<\/code><\/li>\n\n\n\n<li><strong>\u65e5\u4ed8\u7bc4\u56f2\u306e\u30eb\u30fc\u30d7\u51e6\u7406<\/strong>\uff1a DatePeriod\u3092\u4f7f\u7528\u3057\u3066\u65e5\u4ed8\u7bc4\u56f2\u3092\u52b9\u7387\u7684\u306b\u30eb\u30fc\u30d7\u51e6\u7406\u3057\u307e\u3059\u3002 <code>$start = new DateTime('2023-01-01'); $end = new DateTime('2023-01-10'); $interval = new DateInterval('P1D'); \/\/ 1\u65e5\u3054\u3068 $period = new DatePeriod($start, $interval, $end); foreach ($period as $date) { echo $date-&gt;format('Y-m-d') . \"\\n\"; }<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-97\">3. \u5171\u901a\u306e\u843d\u3068\u3057\u7a74\u3068\u5bfe\u7b56<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6587\u5b57\u5217\u89e3\u6790\u306e\u66d6\u6627\u3055\u3092\u907f\u3051\u308b<\/strong>\uff1a \u65e5\u4ed8\u6587\u5b57\u5217\u3092\u89e3\u6790\u3059\u308b\u969b\u306f\u3001<code>createFromFormat()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u660e\u78ba\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002 <code>\/\/ \u66d6\u6627\u3055\u3092\u907f\u3051\u308b $date = DateTime::createFromFormat('Y-m-d', '2023-07-15');<\/code><\/li>\n\n\n\n<li><strong>\u5165\u529b\u5024\u306e\u691c\u8a3c<\/strong>\uff1a \u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3084\u5916\u90e8\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u969b\u306f\u3001\u5fc5\u305a\u65e5\u4ed8\u306e\u691c\u8a3c\u3092\u884c\u3044\u307e\u3059\u3002 <code>$input = $_POST['date'] ?? ''; if (preg_match('\/^\\d{4}-\\d{2}-\\d{2}$\/', $input)) { $parts = explode('-', $input); if (checkdate($parts[1], $parts[2], $parts[0])) { $date = new DateTime($input); } }<\/code><\/li>\n\n\n\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/strong>\uff1a \u5927\u91cf\u306e\u65e5\u4ed8\u51e6\u7406\u3092\u884c\u3046\u5834\u5408\u306f\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30cd\u30a4\u30c6\u30a3\u30d6\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u51e6\u7406\u3084\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-98\">4. \u5b9f\u8df5\u7684\u306a\u30d1\u30bf\u30fc\u30f3<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30a4\u30d9\u30f3\u30c8\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u7ba1\u7406<\/strong>\uff1a \u5b9a\u671f\u7684\u306a\u30a4\u30d9\u30f3\u30c8\u3084\u4e88\u7d04\u306e\u7ba1\u7406\u306b\u306f\u3001DateTime\u30af\u30e9\u30b9\u3068DateInterval\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u306e\u5206\u6790<\/strong>\uff1a \u30ed\u30b0\u89e3\u6790\u3084\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u306e\u51e6\u7406\u306b\u306f\u3001\u65e5\u4ed8\u306e\u96c6\u8a08\u3084\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u56fd\u969b\u5316\u5bfe\u5fdc<\/strong>\uff1a \u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u5909\u63db\u3068\u30ed\u30b1\u30fc\u30eb\u306b\u57fa\u3065\u3044\u305f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u51e6\u7406\u304c\u91cd\u8981\u3067\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-99\">\u3088\u308a\u9ad8\u5ea6\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9<\/h3>\n\n\n\n<p>PHP\u306eDateTime\u30af\u30e9\u30b9\u306b\u3064\u3044\u3066\u3055\u3089\u306b\u6df1\u304f\u5b66\u3073\u305f\u3044\u65b9\u3084\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7fd2\u5f97\u3057\u305f\u3044\u65b9\u306e\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-100\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.php.net\/manual\/ja\/class.datetime.php\">PHP.net \u2013 DateTime \u30af\u30e9\u30b9<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/ja\/class.datetimeimmutable.php\">PHP.net \u2013 DateTimeImmutable \u30af\u30e9\u30b9<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/ja\/class.dateinterval.php\">PHP.net \u2013 DateInterval \u30af\u30e9\u30b9<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/ja\/class.dateperiod.php\">PHP.net \u2013 DatePeriod \u30af\u30e9\u30b9<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/ja\/class.datetimezone.php\">PHP.net \u2013 DateTimeZone \u30af\u30e9\u30b9<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-101\">\u66f8\u7c4d\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u300e\u73fe\u4ee3PHP\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u300f\uff08Modern PHP\uff09- Josh Lockhart\u8457<\/li>\n\n\n\n<li>\u300ePHP\u5b9f\u8df5\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u300f\uff08PHP in Action\uff09- Dagfinn Reiers\u00f8l, Marcus Baker, Chris Shiflett\u8457<\/li>\n\n\n\n<li>\u300ePHP \u30de\u30b9\u30bf\u30fc\u30d6\u30c3\u30af\u300f- \u65e9\u5ddd\u8056\u8457<\/li>\n\n\n\n<li><a href=\"https:\/\/laracasts.com\/\">Laracasts<\/a> \u2013 PHP\u3068Laravel\u306b\u95a2\u3059\u308b\u591a\u6570\u306e\u30d3\u30c7\u30aa\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-102\">\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/carbon.nesbot.com\/\">Carbon<\/a> \u2013 PHP\u306eDateTime\u30af\u30e9\u30b9\u3092\u62e1\u5f35\u3057\u305f\u4eba\u6c17\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3001\u3088\u308a\u76f4\u611f\u7684\u306aAPI\u3092\u63d0\u4f9b<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/cakephp\/chronos\">Chronos<\/a> \u2013 CakePHP\u30c1\u30fc\u30e0\u306b\u3088\u308bDateTime\u3068DateTimeImmutable\u306e\u62e1\u5f35\u30e9\u30a4\u30d6\u30e9\u30ea<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/fightbulc\/moment.php\">Moment.php<\/a> \u2013 JavaScript\u306eMoment.js\u306b\u30a4\u30f3\u30b9\u30d1\u30a4\u30a2\u3055\u308c\u305fPHP\u65e5\u4ed8\u30e9\u30a4\u30d6\u30e9\u30ea<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-103\">\u30aa\u30f3\u30e9\u30a4\u30f3\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/qiita.com\/tags\/php-datetime\">PHP: \u65e5\u4ed8\u3068\u6642\u523b\u306e\u53d6\u308a\u6271\u3044 \u2013 Qiita<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/tagged\/php+datetime\">Stack Overflow \u2013 PHP Date Time \u30bf\u30b0<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/gist.github.com\/suvera\/5257270\">PHP DateTime \u30af\u30e9\u30b9\u306e\u30c1\u30fc\u30c8\u30b7\u30fc\u30c8 \u2013 Github Gist<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-104\">\u95a2\u9023\u3059\u308b\u77e5\u8b58<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.w3.org\/International\/questions\/qa-i18n.ja\">\u56fd\u969b\u5316\uff08i18n\uff09\u3068\u5730\u57df\u5316\uff08l10n\uff09<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.iana.org\/time-zones\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\uff08tz database\uff09<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/ja.wikipedia.org\/wiki\/ISO_8601\">ISO 8601 \u65e5\u4ed8\u30fb\u6642\u523b\u8868\u73fe<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/tools.ietf.org\/html\/rfc3339\">RFC 3339 \u2013 \u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u4e0a\u306e\u65e5\u4ed8\u3068\u6642\u523b<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/ja.wikipedia.org\/wiki\/%E5%A4%8F%E6%99%82%E9%96%93\">\u590f\u6642\u9593\uff08DST\uff09\u306b\u95a2\u3059\u308b\u57fa\u790e\u77e5\u8b58<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-105\">\u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u30a2\u30c3\u30d7\u306e\u305f\u3081\u306e\u8ab2\u984c<\/h4>\n\n\n\n<p>DateTime\u30af\u30e9\u30b9\u306e\u30b9\u30ad\u30eb\u3092\u78e8\u304f\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5b9f\u8df5\u7684\u306a\u8ab2\u984c\u306b\u6311\u6226\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30ec\u30f3\u30c0\u30fc\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30fc<\/strong>\uff1a \u6708\u9593\u307e\u305f\u306f\u9031\u9593\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u30d3\u30e5\u30fc\u3092\u751f\u6210\u3059\u308b\u30af\u30e9\u30b9\u3092\u5b9f\u88c5\u3057\u3001\u795d\u65e5\u306e\u8868\u793a\u3084\u4e88\u5b9a\u306e\u8ffd\u52a0\u6a5f\u80fd\u3092\u7d44\u307f\u8fbc\u3080<\/li>\n\n\n\n<li><strong>\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0<\/strong>\uff1a \u91cd\u8907\u30c1\u30a7\u30c3\u30af\u3001\u7a7a\u304d\u6642\u9593\u691c\u7d22\u3001\u30ad\u30e3\u30f3\u30bb\u30eb\u30dd\u30ea\u30b7\u30fc\u3092\u542b\u3080\u4e88\u7d04\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b<\/li>\n\n\n\n<li><strong>\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316<\/strong>\uff1a \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3084\u30bb\u30f3\u30b5\u30fc\u30c7\u30fc\u30bf\u306a\u3069\u306e\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u3092\u5206\u6790\u3057\u3001\u65e5\/\u9031\/\u6708\u3054\u3068\u306e\u96c6\u8a08\u3084\u30b0\u30e9\u30d5\u8868\u793a\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n\n\n\n<li><strong>\u56fd\u969b\u5316\u5bfe\u5fdc\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>\uff1a \u8907\u6570\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3068\u30ed\u30b1\u30fc\u30eb\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3057\u3001\u5404\u30e6\u30fc\u30b6\u30fc\u306b\u9069\u3057\u305f\u5f62\u5f0f\u3067\u65e5\u6642\u3092\u8868\u793a\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30bf\u30b9\u30af\u30b9\u30b1\u30b8\u30e5\u30fc\u30e9\u30fc<\/strong>\uff1a \u5b9a\u671f\u7684\u306a\u30bf\u30b9\u30af\u3084\u5c06\u6765\u306e\u7279\u5b9a\u6642\u70b9\u3067\u306e\u30bf\u30b9\u30af\u5b9f\u884c\u3092\u7ba1\u7406\u3059\u308b\u30b9\u30b1\u30b8\u30e5\u30fc\u30e9\u30fc\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-106\">\u304a\u308f\u308a\u306b<\/h3>\n\n\n\n<p>PHP\u306eDateTime\u30af\u30e9\u30b9\u306f\u3001\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u306b\u95a2\u3059\u308b\u591a\u304f\u306e\u8ab2\u984c\u3092\u52b9\u7387\u7684\u306b\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u304b\u3089\u9ad8\u5ea6\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3001\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u307e\u3067\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u3067\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u306f\u5358\u7d14\u306b\u898b\u3048\u3066\u8907\u96d1\u306a\u8ab2\u984c\u3067\u3059\u304c\u3001\u3053\u306e\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u77e5\u8b58\u3068\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5fdc\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u591a\u304f\u306e\u843d\u3068\u3057\u7a74\u3092\u907f\u3051\u3001\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u304c\u53ef\u80fd\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002PHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3051\u308b\u65e5\u4ed8\u3068\u6642\u9593\u306e\u51e6\u7406\u306b\u3001DateTime\u30af\u30e9\u30b9\u306e\u5f37\u529b\u306a\u6a5f\u80fd\u3092\u305c\u3072\u6d3b\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>\u300c\u6642\u306f\u91d1\u306a\u308a\u300d\u3068\u3044\u3046\u8a00\u8449\u304c\u3042\u308b\u3088\u3046\u306b\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u4e16\u754c\u3067\u3082\u6642\u9593\u306f\u8cb4\u91cd\u306a\u30ea\u30bd\u30fc\u30b9\u3067\u3059\u3002DateTime\u30af\u30e9\u30b9\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b\u3053\u3068\u3067\u3001\u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u3082\u6642\u9593\u3082\u5927\u5207\u306b\u6271\u3048\u308b\u3088\u3046\u306b\u306a\u308b\u306f\u305a\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u7686\u3055\u3093\u306e\u958b\u767a\u304c\u3088\u308a\u52b9\u7387\u7684\u3067\u6b63\u78ba\u306a\u3082\u306e\u306b\u306a\u308b\u3053\u3068\u3092\u9858\u3063\u3066\u3044\u307e\u3059\u3002\u8cea\u554f\u3084\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u304c\u3042\u308c\u3070\u3001\u305c\u3072\u30b3\u30e1\u30f3\u30c8\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u304a\u77e5\u3089\u305b\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>Happy coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#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-3440","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\/3440","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=3440"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3440\/revisions"}],"predecessor-version":[{"id":3441,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3440\/revisions\/3441"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}