{"id":2473,"date":"2025-03-24T08:47:12","date_gmt":"2025-03-23T23:47:12","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2473"},"modified":"2025-03-24T08:47:42","modified_gmt":"2025-03-23T23:47:42","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91php-carbon%e3%81%ae%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e6%97%a5%e4%bb%98%e5%87%a6%e7%90%86%e3%82%9210%e5%80%8d%e5%8a%b9%e7%8e%87","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2473","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011PHP Carbon\u306e\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u65e5\u4ed8\u51e6\u7406\u309210\u500d\u52b9\u7387\u5316\u3059\u308b\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"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\">PHP Carbon\u3068\u306f\uff1a\u9078\u3076\u3079\u304d5\u3064\u306e\u7406\u7531<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">PHP\u306eDateTime\u64cd\u4f5c\u306b\u304a\u3051\u308b\u8ab2\u984c\u3068\u9650\u754c<\/a>      <\/li>      <li>        <a href=\"#i-2\">Carbon\u304c\u63d0\u4f9b\u3059\u308b\u9769\u65b0\u7684\u306a\u89e3\u6c7a\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u4e3b\u8981\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u89aa\u548c\u6027\u306e\u9ad8\u3055<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">Carbon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u8a2d\u5b9a<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">Composer\u3092\u4f7f\u3063\u305f\u7c21\u5358\u5c0e\u5165\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u6700\u9069\u306a\u8a2d\u5b9a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">\u65e5\u4ed8\u64cd\u4f5c\u306e\u57fa\u672c\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u65e5\u4ed8\u306e\u751f\u6210\u3068\u5909\u63db\u306e\u52b9\u7387\u7684\u306a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-10\">\u65e5\u4ed8\u306e\u6bd4\u8f03\u3068\u6f14\u7b97\u306e\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u66f4\u3068\u8868\u793a\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u5b9f\u8df5\u7684\u306a\u5fdc\u7528\u30c6\u30af\u30cb\u30c3\u30af\u96c6<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u671f\u9593\u8a08\u7b97\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-14\">\u65e5\u4ed8\u7bc4\u56f2\u306e\u64cd\u4f5c\u3068\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u30ed\u30fc\u30ab\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30c7\u30d0\u30c3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-18\">\u4e00\u822c\u7684\u306a\u554f\u984c\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3067\u306e\u52b9\u679c\u6d3b\u7528\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-20\">\u5b9f\u52d9\u3067\u306e\u6d3b\u7528\u4e8b\u4f8b\u3068\u5177\u4f53\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-21\">\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3067\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-22\">\u7d71\u8a08\u30c7\u30fc\u30bf\u4e00\u62ec\u3067\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\">\u30d0\u30c3\u30c1\u51e6\u7406\u3067\u306e\u52b9\u7387\u7684\u306a\u4f7f\u3044\u65b9<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">PHP Carbon\u3068\u306f\uff1a\u9078\u3076\u3079\u304d5\u3064\u306e\u7406\u7531<\/h2>\n\n\n\n<p>PHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u65e5\u4ed8\u3068\u6642\u523b\u306e\u51e6\u7406\u306f\u907f\u3051\u3066\u306f\u901a\u308c\u306a\u3044\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002PHP Carbon\u306f\u3001\u3053\u306e\u65e5\u4ed8\u51e6\u7406\u3092\u9769\u65b0\u7684\u306b\u6539\u5584\u3059\u308b\u5f37\u529b\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u3057\u3066\u3001\u591a\u304f\u306e\u958b\u767a\u8005\u304b\u3089\u652f\u6301\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u306a\u305cPHP Carbon\u3092\u9078\u3076\u3079\u304d\u306a\u306e\u304b\u30015\u3064\u306e\u5177\u4f53\u7684\u306a\u7406\u7531\u3068\u3068\u3082\u306b\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">PHP\u306eDateTime\u64cd\u4f5c\u306b\u304a\u3051\u308b\u8ab2\u984c\u3068\u9650\u754c<\/h3>\n\n\n\n<p>\u5f93\u6765\u306ePHP\u306b\u304a\u3051\u308b\u65e5\u4ed8\u51e6\u7406\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8ab2\u984c\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8907\u96d1\u306a\u69cb\u6587<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>DateTime<\/code>\u30af\u30e9\u30b9\u306e\u69cb\u6587\u304c\u76f4\u611f\u7684\u3067\u306a\u3044<\/li>\n\n\n\n<li>\u65e5\u4ed8\u306e\u52a0\u7b97\u30fb\u6e1b\u7b97\u306b\u591a\u304f\u306e\u30b3\u30fc\u30c9\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u6307\u5b9a\u304c\u7169\u96d1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6a5f\u80fd\u306e\u4e0d\u8db3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u671f\u9593\u8a08\u7b97\u306e\u5b9f\u88c5\u304c\u9762\u5012<\/li>\n\n\n\n<li>\u65e5\u4ed8\u6bd4\u8f03\u306e\u30e1\u30bd\u30c3\u30c9\u304c\u9650\u5b9a\u7684<\/li>\n\n\n\n<li>\u30ed\u30fc\u30ab\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u5bfe\u5fdc\u304c\u4e0d\u5341\u5206<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">Carbon\u304c\u63d0\u4f9b\u3059\u308b\u9769\u65b0\u7684\u306a\u89e3\u6c7a\u7b56<\/h3>\n\n\n\n<p>Carbon\u306f\u3001\u3053\u308c\u3089\u306e\u8ab2\u984c\u306b\u5bfe\u3057\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u9769\u65b0\u7684\u306a\u89e3\u6c7a\u7b56\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u76f4\u611f\u7684\u306aAPI<\/strong><\/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=\"\">\/\/ \u5f93\u6765\u306eDateTime\n$date = new DateTime();\n$date-&gt;modify('+1 day');\n\n\/\/ Carbon\u306e\u5834\u5408\nuse Carbon\\Carbon;\n$date = Carbon::now()-&gt;addDay();  \/\/ \u3088\u308a\u76f4\u611f\u7684<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8c4a\u5bcc\u306a\u30e1\u30bd\u30c3\u30c9\u7fa4<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n\/\/ \u65e5\u4ed8\u6bd4\u8f03\u304c\u7c21\u5358\n$date1-&gt;equalTo($date2);\n$date1-&gt;gt($date2);      \/\/ \u3088\u308a\u5927\u304d\u3044\n$date1-&gt;lte($date2);     \/\/ \u4ee5\u4e0b\n\n\/\/ \u671f\u9593\u8a08\u7b97\u3082\u76f4\u611f\u7684\n$date1-&gt;diffInDays($date2);\n$date1-&gt;diffInMonths($date2);<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5f37\u529b\u306a\u30ed\u30fc\u30ab\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nCarbon::setLocale('ja');\necho Carbon::now()-&gt;isoFormat('LLLL'); \/\/ 2025\u5e741\u670831\u65e5\u91d1\u66dc\u65e5 \u5348\u5f8c3\u664230\u5206<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u5bfe\u5fdc<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n$nextFriday = Carbon::now()\n    -&gt;addWeek()\n    -&gt;previous(Carbon::FRIDAY)\n    -&gt;setTime(17, 0, 0);<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u52b9\u7387\u306e\u5927\u5e45\u306a\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u884c\u6570\u306e\u524a\u6e1b<\/li>\n\n\n\n<li>\u30d0\u30b0\u306e\u767a\u751f\u30ea\u30b9\u30af\u4f4e\u6e1b<\/li>\n\n\n\n<li>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u4e3b\u8981\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u89aa\u548c\u6027\u306e\u9ad8\u3055<\/h3>\n\n\n\n<p>\u6700\u65b0\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u7d71\u5408\u3082\u3001Carbon\u306e\u5927\u304d\u306a\u5f37\u307f\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Laravel\u3068\u306e\u5b8c\u74a7\u306a\u7d71\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Eloquent\u30e2\u30c7\u30eb\u3067\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u65e5\u4ed8\u30ab\u30e9\u30e0\u64cd\u4f5c<\/li>\n\n\n\n<li>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u3068\u306e\u9023\u643a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Symfony\u3067\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Doctrine\u3068\u306e\u9023\u643a<\/li>\n\n\n\n<li>\u30d5\u30a9\u30fc\u30e0\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u306e\u5229\u7528<\/li>\n\n\n\n<li>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u3068\u306e\u7d71\u5408<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u305d\u306e\u4ed6\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306e\u5229\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CakePHP<\/li>\n\n\n\n<li>Yii2<\/li>\n\n\n\n<li>CodeIgniter4<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u7279\u5fb4\u304b\u3089\u3001PHP Carbon\u306f\u73fe\u4ee3\u306ePHP\u958b\u767a\u306b\u304a\u3044\u3066\u5fc5\u9808\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u8a00\u3048\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u3068\u57fa\u672c\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">Carbon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u8a2d\u5b9a<\/h2>\n\n\n\n<p>PHP Carbon\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u9069\u5207\u306a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u8a2d\u5b9a\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30b9\u30e0\u30fc\u30ba\u306a\u5c0e\u5165\u306e\u305f\u3081\u306e\u624b\u9806\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">Composer\u3092\u4f7f\u3063\u305f\u7c21\u5358\u5c0e\u5165\u65b9\u6cd5<\/h3>\n\n\n\n<p>Composer\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001PHP Carbon\u3092\u7c21\u5358\u304b\u3064\u78ba\u5b9f\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u5c0e\u5165\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/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=\"\"># \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u5b9f\u884c\ncomposer require nesbot\/carbon<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u6307\u5b9a\u3067\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/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=\"\"># \u7279\u5b9a\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6307\u5b9a\u3059\u308b\u5834\u5408\ncomposer require nesbot\/carbon:^2.0<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30aa\u30fc\u30c8\u30ed\u30fc\u30c9\u306e\u8a2d\u5b9a<\/strong><\/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=\"\">\/\/ composer.json\u306b\u81ea\u52d5\u3067\u8ffd\u52a0\u3055\u308c\u307e\u3059\nrequire_once 'vendor\/autoload.php';\n\n\/\/ \u540d\u524d\u7a7a\u9593\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\nuse Carbon\\Carbon;\nuse Carbon\\CarbonInterval;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u6700\u9069\u306a\u8a2d\u5b9a\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067Carbon\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u8a2d\u5b9a\u306e\u521d\u671f\u5316<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u3067\u8a2d\u5b9a\nCarbon::macro('toFormattedDateString', function () {\n    return $this-&gt;format('Y\u5e74m\u6708d\u65e5');\n});\n\n\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u6587\u5b57\u5217\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\nCarbon::setToStringFormat('Y-m-d H:i:s');<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u8a2d\u5b9a<\/strong><\/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=\"\">use Carbon\\Carbon;\nuse Carbon\\Exceptions\\InvalidFormatException;\n\ntry {\n    $date = Carbon::createFromFormat('Y-m-d', '\u4e0d\u6b63\u306a\u65e5\u4ed8\u6587\u5b57\u5217');\n} catch (InvalidFormatException $e) {\n    \/\/ \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n    error_log('\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u4e0d\u6b63\u3067\u3059: ' . $e-&gt;getMessage());\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u8a2d\u5b9a<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n\/\/ \u30c6\u30b9\u30c8\u7528\u306b\u65e5\u4ed8\u3092\u56fa\u5b9a\nCarbon::setTestNow(Carbon::create(2025, 1, 1));\n\n\/\/ \u30c6\u30b9\u30c8\u306e\u5b9f\u884c\u5f8c\nCarbon::setTestNow(); \/\/ \u30ea\u30bb\u30c3\u30c8<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u9069\u5207\u306a\u7ba1\u7406\u306f\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u7279\u306b\u91cd\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u8a2d\u5b9a<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\nCarbon::setLocale('Asia\/Tokyo');\n\n\/\/ \u7279\u5b9a\u306e\u51e6\u7406\u3067\u306e\u307f\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u5909\u66f4\n$date = Carbon::now()-&gt;shiftTimezone('UTC');<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u7ba1\u7406<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nclass UserTimeZoneMiddleware\n{\n    public function handle($request, $next)\n    {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u53d6\u5f97\uff08\u4f8b\uff1a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\uff09\n        $userTimezone = $request-&gt;user()-&gt;timezone ?? 'UTC';\n\n        \/\/ \u73fe\u5728\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u7528\u306b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\n        Carbon::setLocale($userTimezone);\n\n        return $next($request);\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u5909\u63db\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n\/\/ UTC \u3067\u4fdd\u5b58\u3055\u308c\u305f\u65e5\u6642\u3092\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5909\u63db\n$utcStoredDate = '2025-01-31 15:30:00';\n$userTimezone = 'Asia\/Tokyo';\n\n$localDate = Carbon::createFromFormat('Y-m-d H:i:s', $utcStoredDate, 'UTC')\n    -&gt;setTimezone($userTimezone);\n\n\/\/ \u8868\u793a\u7528\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $localDate-&gt;isoFormat('LLLL'); \/\/ 2025\u5e741\u670832\u65e5 0:30<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3092\u9069\u5207\u306b\u884c\u3046\u3053\u3068\u3067\u3001Carbon\u306e\u6a5f\u80fd\u3092\u6700\u5927\u9650\u306b\u6d3b\u7528\u3067\u304d\u308b\u74b0\u5883\u304c\u6574\u3044\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u65e5\u4ed8\u64cd\u4f5c\u306e\u57fa\u672c\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">\u65e5\u4ed8\u64cd\u4f5c\u306e\u57fa\u672c\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<p>PHP Carbon\u3092\u4f7f\u7528\u3057\u305f\u65e5\u4ed8\u64cd\u4f5c\u306e\u57fa\u672c\u30c6\u30af\u30cb\u30c3\u30af\u3092\u3001\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3068\u3068\u3082\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u65e5\u5e38\u7684\u306b\u5fc5\u8981\u3068\u306a\u308b\u64cd\u4f5c\u65b9\u6cd5\u3092\u7db2\u7f85\u7684\u306b\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u65e5\u4ed8\u306e\u751f\u6210\u3068\u5909\u63db\u306e\u52b9\u7387\u7684\u306a\u65b9\u6cd5<\/h3>\n\n\n\n<p>Carbon\u3067\u306f\u3001\u69d8\u3005\u306a\u65b9\u6cd5\u3067\u65e5\u4ed8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\u3067\u304d\u307e\u3059\u3002\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u6700\u9069\u306a\u65b9\u6cd5\u3092\u9078\u629e\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u65e5\u4ed8\u751f\u6210<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n\/\/ \u73fe\u5728\u306e\u65e5\u6642\u3092\u53d6\u5f97\n$now = Carbon::now();  \/\/ 2025-01-31 15:30:00\n\n\/\/ \u7279\u5b9a\u306e\u65e5\u6642\u3092\u6307\u5b9a\u3057\u3066\u751f\u6210\n$date = Carbon::create(2025, 1, 31, 15, 30, 0);\n$date = Carbon::createFromDate(2025, 1, 31);\n$date = Carbon::createFromTime(15, 30, 0);\n\n\/\/ \u6587\u5b57\u5217\u304b\u3089\u306e\u5909\u63db\n$date = Carbon::parse('2025-01-31 15:30:00');\n$date = Carbon::createFromFormat('Y-m-d H:i:s', '2025-01-31 15:30:00');<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4fbf\u5229\u306a\u65e5\u4ed8\u751f\u6210\u30e1\u30bd\u30c3\u30c9<\/strong><\/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=\"\">\/\/ \u4eca\u65e5\u3001\u6628\u65e5\u3001\u660e\u65e5\n$today = Carbon::today();      \/\/ \u4eca\u65e5\u306e0\u66420\u5206\n$yesterday = Carbon::yesterday();\n$tomorrow = Carbon::tomorrow();\n\n\/\/ \u9031\u521d\u3081\u3001\u9031\u672b\n$startOfWeek = Carbon::now()-&gt;startOfWeek();\n$endOfWeek = Carbon::now()-&gt;endOfWeek();\n\n\/\/ \u6708\u521d\u3081\u3001\u6708\u672b\n$startOfMonth = Carbon::now()-&gt;startOfMonth();\n$endOfMonth = Carbon::now()-&gt;endOfMonth();<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u65e5\u4ed8\u306e\u6bd4\u8f03\u3068\u6f14\u7b97\u306e\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>\u65e5\u4ed8\u306e\u6bd4\u8f03\u3068\u6f14\u7b97\u306f\u3001\u5b9f\u52d9\u3067\u6700\u3082\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u6a5f\u80fd\u306e\u4e00\u3064\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65e5\u4ed8\u306e\u6bd4\u8f03<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n$date1 = Carbon::create(2025, 1, 1);\n$date2 = Carbon::create(2025, 1, 31);\n\n\/\/ \u57fa\u672c\u7684\u306a\u6bd4\u8f03\n$date1-&gt;equalTo($date2);    \/\/ \u7b49\u3057\u3044\n$date1-&gt;notEqualTo($date2); \/\/ \u7b49\u3057\u304f\u306a\u3044\n$date1-&gt;gt($date2);         \/\/ \u3088\u308a\u5927\u304d\u3044\n$date1-&gt;gte($date2);        \/\/ \u4ee5\u4e0a\n$date1-&gt;lt($date2);         \/\/ \u3088\u308a\u5c0f\u3055\u3044\n$date1-&gt;lte($date2);        \/\/ \u4ee5\u4e0b\n\n\/\/ \u7bc4\u56f2\u30c1\u30a7\u30c3\u30af\n$checkDate = Carbon::now();\n$checkDate-&gt;between($date1, $date2);    \/\/ \u7bc4\u56f2\u5185\u304b\u30c1\u30a7\u30c3\u30af\n$checkDate-&gt;betweenIncluded($date1, $date2); \/\/ \u5883\u754c\u3092\u542b\u3080\n\n\/\/ \u5404\u7a2e\u6761\u4ef6\u30c1\u30a7\u30c3\u30af\n$date-&gt;isWeekday();        \/\/ \u5e73\u65e5\u304b\u3069\u3046\u304b\n$date-&gt;isWeekend();        \/\/ \u9031\u672b\u304b\u3069\u3046\u304b\n$date-&gt;isToday();          \/\/ \u4eca\u65e5\u304b\u3069\u3046\u304b\n$date-&gt;isFuture();         \/\/ \u672a\u6765\u306e\u65e5\u4ed8\u304b\u3069\u3046\u304b\n$date-&gt;isPast();           \/\/ \u904e\u53bb\u306e\u65e5\u4ed8\u304b\u3069\u3046\u304b<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u65e5\u4ed8\u306e\u6f14\u7b97<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n$date = Carbon::now();\n\n\/\/ \u52a0\u7b97\n$date-&gt;addYear();          \/\/ 1\u5e74\u5f8c\n$date-&gt;addYears(2);        \/\/ 2\u5e74\u5f8c\n$date-&gt;addMonth();         \/\/ 1\u30f6\u6708\u5f8c\n$date-&gt;addMonths(3);       \/\/ 3\u30f6\u6708\u5f8c\n$date-&gt;addDay();           \/\/ 1\u65e5\u5f8c\n$date-&gt;addDays(5);         \/\/ 5\u65e5\u5f8c\n$date-&gt;addWeekdays(5);     \/\/ \u55b6\u696d\u65e5\u30675\u65e5\u5f8c\n\n\/\/ \u6e1b\u7b97\n$date-&gt;subYear();          \/\/ 1\u5e74\u524d\n$date-&gt;subYears(2);        \/\/ 2\u5e74\u524d\n$date-&gt;subMonth();         \/\/ 1\u30f6\u6708\u524d\n$date-&gt;subMonths(3);       \/\/ 3\u30f6\u6708\u524d\n$date-&gt;subDay();           \/\/ 1\u65e5\u524d\n$date-&gt;subDays(5);         \/\/ 5\u65e5\u524d\n\n\/\/ \u5dee\u5206\u8a08\u7b97\n$diff = $date1-&gt;diffInDays($date2);    \/\/ \u65e5\u6570\u306e\u5dee\n$diff = $date1-&gt;diffInMonths($date2);   \/\/ \u6708\u6570\u306e\u5dee\n$diff = $date1-&gt;diffInYears($date2);    \/\/ \u5e74\u6570\u306e\u5dee<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u66f4\u3068\u8868\u793a\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h3>\n\n\n\n<p>\u65e5\u4ed8\u306e\u8868\u793a\u5f62\u5f0f\u306f\u3001\u7528\u9014\u306b\u5fdc\u3058\u3066\u9069\u5207\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n$date = Carbon::now();\n\n\/\/ \u6a19\u6e96\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $date-&gt;toDateString();           \/\/ 2025-01-31\necho $date-&gt;toTimeString();           \/\/ 15:30:00\necho $date-&gt;toDateTimeString();       \/\/ 2025-01-31 15:30:00\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho $date-&gt;format('Y\u5e74m\u6708d\u65e5');      \/\/ 2025\u5e7401\u670831\u65e5\necho $date-&gt;format('H\u6642i\u5206');         \/\/ 15\u664230\u5206<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u3055\u308c\u305f\u8868\u793a<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nCarbon::setLocale('ja');\n\n$date = Carbon::now();\n\n\/\/ \u76f8\u5bfe\u7684\u306a\u8868\u73fe\necho $date-&gt;diffForHumans();  \/\/ 1\u5206\u524d\u30012\u6642\u9593\u5f8c\u306a\u3069\n\n\/\/ \u9577\u3044\u5f62\u5f0f\necho $date-&gt;isoFormat('LLLL'); \/\/ 2025\u5e741\u670831\u65e5\u91d1\u66dc\u65e5 15\u664230\u5206\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30e1\u30c3\u30bb\u30fc\u30b8\necho $date-&gt;calendar();  \/\/ \u4eca\u65e5 15:30<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7fd2\u5f97\u3059\u308b\u3053\u3068\u3067\u3001\u65e5\u4ed8\u51e6\u7406\u306e\u591a\u304f\u306e\u30b1\u30fc\u30b9\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u5fdc\u7528\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u5b9f\u8df5\u7684\u306a\u5fdc\u7528\u30c6\u30af\u30cb\u30c3\u30af\u96c6<\/h2>\n\n\n\n<p>\u5b9f\u52d9\u3067\u306e\u3088\u308a\u8907\u96d1\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u3001PHP Carbon\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u8df5\u7684\u306a\u5834\u9762\u3067\u4f7f\u3048\u308b\u5177\u4f53\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u671f\u9593\u8a08\u7b97\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u8907\u96d1\u306a\u671f\u9593\u8a08\u7b97\u3092\u7c21\u6f54\u306b\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u671f\u9593\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u6d3b\u7528<\/strong><\/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=\"\">use Carbon\\Carbon;\nuse Carbon\\CarbonInterval;\nuse Carbon\\CarbonPeriod;\n\n\/\/ \u671f\u9593\u306e\u5b9a\u7fa9\n$interval = CarbonInterval::create(2, 3, 0, 4); \/\/ 2\u5e743\u30f6\u67084\u65e5\n$interval = CarbonInterval::years(2)\n    -&gt;months(3)\n    -&gt;days(4);\n\n\/\/ \u671f\u9593\u306e\u52a0\u7b97\n$date = Carbon::now()-&gt;add($interval);\n\n\/\/ \u671f\u9593\u306e\u6587\u5b57\u5217\u8868\u73fe\necho $interval-&gt;forHumans(); \/\/ 2\u5e743\u30f6\u67084\u65e5\n\n\/\/ \u55b6\u696d\u65e5\u306e\u8a08\u7b97\n$workdays = CarbonInterval::weekdays(10); \/\/ \u55b6\u696d\u65e510\u65e5\u5206\n$futureDate = Carbon::now()-&gt;add($workdays);<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8907\u96d1\u306a\u671f\u9593\u8a08\u7b97<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nclass BusinessDaysCalculator\n{\n    private $holidays = [];\n\n    public function addHoliday(Carbon $date)\n    {\n        $this-&gt;holidays[] = $date-&gt;startOfDay();\n    }\n\n    public function addBusinessDays(Carbon $date, int $days): Carbon\n    {\n        $result = $date-&gt;copy();\n        $addedDays = 0;\n\n        while ($addedDays &lt; $days) {\n            $result-&gt;addDay();\n            if ($this-&gt;isBusinessDay($result)) {\n                $addedDays++;\n            }\n        }\n\n        return $result;\n    }\n\n    private function isBusinessDay(Carbon $date): bool\n    {\n        \/\/ \u9031\u672b\u30c1\u30a7\u30c3\u30af\n        if ($date-&gt;isWeekend()) {\n            return false;\n        }\n\n        \/\/ \u795d\u65e5\u30c1\u30a7\u30c3\u30af\n        foreach ($this-&gt;holidays as $holiday) {\n            if ($date-&gt;startOfDay()-&gt;equalTo($holiday)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u65e5\u4ed8\u7bc4\u56f2\u306e\u64cd\u4f5c\u3068\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3<\/h3>\n\n\n\n<p>\u65e5\u4ed8\u7bc4\u56f2\u3092\u6271\u3046\u969b\u306e\u52b9\u7387\u7684\u306a\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65e5\u4ed8\u7bc4\u56f2\u306e\u751f\u6210\u3068\u64cd\u4f5c<\/strong><\/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=\"\">use Carbon\\Carbon;\nuse Carbon\\CarbonPeriod;\n\n\/\/ \u65e5\u4ed8\u7bc4\u56f2\u306e\u4f5c\u6210\n$period = CarbonPeriod::create('2025-01-01', '2025-12-31');\n$period = new CarbonPeriod('2025-01-01', '1 month', '2025-12-31');\n\n\/\/ \u7bc4\u56f2\u306e\u7d5e\u308a\u8fbc\u307f\n$period = $period-&gt;filter(function (Carbon $date) {\n    return $date-&gt;isWeekday();  \/\/ \u5e73\u65e5\u306e\u307f\n});\n\n\/\/ \u7bc4\u56f2\u5185\u306e\u65e5\u4ed8\u3092\u30a4\u30c6\u30ec\u30fc\u30c8\nforeach ($period as $date) {\n    echo $date-&gt;format('Y-m-d') . \"\\n\";\n}\n\n\/\/ \u7279\u5b9a\u306e\u66dc\u65e5\u306e\u307f\u3092\u53d6\u5f97\n$mondays = $period-&gt;filter(function (Carbon $date) {\n    return $date-&gt;isMonday();\n});<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u65e5\u4ed8\u7bc4\u56f2\u306e\u9ad8\u5ea6\u306a\u64cd\u4f5c<\/strong><\/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=\"\">use Carbon\\CarbonPeriod;\n\nclass DateRangeManager\n{\n    public static function getMonthlyReportDates(Carbon $startDate, Carbon $endDate): array\n    {\n        $period = CarbonPeriod::create($startDate, '1 month', $endDate);\n\n        return array_map(function ($date) {\n            return [\n                'start' =&gt; $date-&gt;copy()-&gt;startOfMonth(),\n                'end' =&gt; $date-&gt;copy()-&gt;endOfMonth(),\n                'report_due' =&gt; $date-&gt;copy()-&gt;addMonths(1)-&gt;startOfMonth()-&gt;addDays(5)\n            ];\n        }, iterator_to_array($period));\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30ed\u30fc\u30ab\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u591a\u8a00\u8a9e\u5bfe\u5fdc\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u65e5\u4ed8\u8868\u793a\u3092\u9069\u5207\u306b\u51e6\u7406\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30ed\u30fc\u30ab\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3<\/strong><\/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=\"\">use Carbon\\Carbon;\n\n\/\/ \u8a00\u8a9e\u8a2d\u5b9a\nCarbon::setLocale('ja');\n\n$date = Carbon::now();\n\n\/\/ \u5404\u7a2e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u306e\u51fa\u529b\necho $date-&gt;isoFormat('LL');       \/\/ 2025\u5e741\u670831\u65e5\necho $date-&gt;isoFormat('LLLL');     \/\/ 2025\u5e741\u670831\u65e5\u91d1\u66dc\u65e5 15:30\n\n\/\/ \u76f8\u5bfe\u6642\u9593\u306e\u8868\u793a\necho $date-&gt;diffForHumans();       \/\/ 1\u5206\u524d\necho $date-&gt;diffForHumans([\n    'parts' =&gt; 2,                  \/\/ \u8868\u793a\u3059\u308b\u5358\u4f4d\u6570\n    'join' =&gt; true                 \/\/ \u7d50\u5408\u65b9\u6cd5\n]);<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30ed\u30fc\u30ab\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nclass LocalizedDateFormatter\n{\n    private $locale;\n    private $formats;\n\n    public function __construct(string $locale)\n    {\n        $this-&gt;locale = $locale;\n        $this-&gt;formats = $this-&gt;getFormats($locale);\n    }\n\n    private function getFormats(string $locale): array\n    {\n        return [\n            'ja' =&gt; [\n                'full_date' =&gt; 'Y\u5e74m\u6708d\u65e5',\n                'short_date' =&gt; 'Y\/m\/d',\n                'full_datetime' =&gt; 'Y\u5e74m\u6708d\u65e5 H\u6642i\u5206',\n                'relative_time' =&gt; ':time\u524d'\n            ],\n            'en' =&gt; [\n                'full_date' =&gt; 'F j, Y',\n                'short_date' =&gt; 'Y-m-d',\n                'full_datetime' =&gt; 'F j, Y H:i',\n                'relative_time' =&gt; ':time ago'\n            ]\n        ][$locale] ?? [];\n    }\n\n    public function format(Carbon $date, string $formatKey): string\n    {\n        return $date-&gt;format($this-&gt;formats[$formatKey] ?? 'Y-m-d');\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5fdc\u7528\u30c6\u30af\u30cb\u30c3\u30af\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u8907\u96d1\u306a\u696d\u52d9\u8981\u4ef6\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30c7\u30d0\u30c3\u30b0\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30c7\u30d0\u30c3\u30b0<\/h2>\n\n\n\n<p>PHP Carbon\u3092\u5b9f\u904b\u7528\u3067\u6d3b\u7528\u3059\u308b\u969b\u306b\u91cd\u8981\u3068\u306a\u308b\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316\u65b9\u6cd5\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u5927\u91cf\u306e\u65e5\u4ed8\u51e6\u7406\u3092\u884c\u3046\u969b\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6700\u9069\u5316\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u306e\u6700\u9069\u5316<\/strong><\/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=\"\">use Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\n\nclass DateProcessor\n{\n    public function processLargeDateSet(array $dates)\n    {\n        \/\/ \u60aa\u3044\u4f8b\uff1a\u5927\u91cf\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u751f\u6210\n        $processed = array_map(function ($date) {\n            return Carbon::parse($date);  \/\/ \u6bce\u56de\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u751f\u6210\n        }, $dates);\n\n        \/\/ \u826f\u3044\u4f8b\uff1a\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u518d\u5229\u7528\n        $carbon = new Carbon();\n        $processed = array_map(function ($date) use ($carbon) {\n            return $carbon-&gt;parse($date);  \/\/ \u540c\u3058\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u518d\u5229\u7528\n        }, $dates);\n\n        \/\/ \u3055\u3089\u306b\u826f\u3044\u4f8b\uff1a\u30a4\u30df\u30e5\u30fc\u30bf\u30d6\u30eb\u306a\u5b9f\u88c5\n        return array_map(function ($date) {\n            return CarbonImmutable::parse($date);  \/\/ \u526f\u4f5c\u7528\u3092\u9632\u3050\n        }, $dates);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nclass DateRangeProcessor\n{\n    private $cache = [];\n\n    public function processPeriod(Carbon $start, Carbon $end)\n    {\n        \/\/ \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u5236\u9650\n        if (count($this-&gt;cache) &gt; 1000) {\n            $this-&gt;cache = array_slice($this-&gt;cache, -500, 500, true);\n        }\n\n        $cacheKey = $start-&gt;toDateString() . '_' . $end-&gt;toDateString();\n\n        if (isset($this-&gt;cache[$cacheKey])) {\n            return $this-&gt;cache[$cacheKey];\n        }\n\n        \/\/ \u51e6\u7406\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\n        $this-&gt;cache[$cacheKey] = $this-&gt;calculatePeriod($start, $end);\n\n        return $this-&gt;cache[$cacheKey];\n    }\n\n    private function calculatePeriod(Carbon $start, Carbon $end)\n    {\n        \/\/ \u671f\u9593\u306e\u8a08\u7b97\u51e6\u7406\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u4e00\u822c\u7684\u306a\u554f\u984c\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h3>\n\n\n\n<p>\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u554f\u984c\u89e3\u6c7a<\/strong><\/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=\"\">use Carbon\\Carbon;\nuse Carbon\\Exceptions\\InvalidTimeZoneException;\n\nclass TimeZoneHandler\n{\n    public function safelySetTimeZone($timezone)\n    {\n        try {\n            \/\/ \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306e\u59a5\u5f53\u6027\u30c1\u30a7\u30c3\u30af\n            if (!in_array($timezone, timezone_identifiers_list())) {\n                throw new InvalidTimeZoneException(\"Invalid timezone: {$timezone}\");\n            }\n\n            Carbon::setTimezone($timezone);\n            return true;\n\n        } catch (InvalidTimeZoneException $e) {\n            error_log(\"\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage());\n            \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\n            Carbon::setTimezone('UTC');\n            return false;\n        }\n    }\n\n    public function debugTimeZoneIssues(Carbon $date)\n    {\n        echo \"Current PHP TimeZone: \" . date_default_timezone_get() . \"\\n\";\n        echo \"Carbon Default TimeZone: \" . Carbon::getDefaultTimezone() . \"\\n\";\n        echo \"Date TimeZone: \" . $date-&gt;timezone-&gt;getName() . \"\\n\";\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u554f\u984c\u89e3\u6c7a<\/strong><\/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=\"\">use Carbon\\Carbon;\nuse Carbon\\Exceptions\\InvalidFormatException;\n\nclass DateFormatDebugger\n{\n    public function validateFormat($dateString, $format)\n    {\n        try {\n            $date = Carbon::createFromFormat($format, $dateString);\n\n            if ($date === false) {\n                $errors = Carbon::getLastErrors();\n                throw new InvalidFormatException(\n                    \"Format validation failed: \" . json_encode($errors)\n                );\n            }\n\n            return true;\n\n        } catch (InvalidFormatException $e) {\n            error_log(\"\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage());\n            return false;\n        }\n    }\n\n    public function debugDateFormat($dateString)\n    {\n        \/\/ \u4e00\u822c\u7684\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u8a66\u884c\n        $formats = [\n            'Y-m-d',\n            'Y\/m\/d',\n            'Y.m.d',\n            'Y-m-d H:i:s',\n            'd\/m\/Y',\n            'm\/d\/Y'\n        ];\n\n        foreach ($formats as $format) {\n            if ($this-&gt;validateFormat($dateString, $format)) {\n                echo \"Valid format found: {$format}\\n\";\n                return $format;\n            }\n        }\n\n        return null;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3067\u306e\u52b9\u679c\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>Carbon\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30fc\u30c9\u3092\u52b9\u679c\u7684\u306b\u30c6\u30b9\u30c8\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9<\/strong><\/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=\"\">use PHPUnit\\Framework\\TestCase;\nuse Carbon\\Carbon;\n\nclass DateProcessingTest extends TestCase\n{\n    protected function setUp(): void\n    {\n        parent::setUp();\n        \/\/ \u30c6\u30b9\u30c8\u7528\u306e\u56fa\u5b9a\u6642\u523b\u3092\u8a2d\u5b9a\n        Carbon::setTestNow(Carbon::create(2025, 1, 1));\n    }\n\n    protected function tearDown(): void\n    {\n        \/\/ \u30c6\u30b9\u30c8\u7528\u6642\u523b\u3092\u30ea\u30bb\u30c3\u30c8\n        Carbon::setTestNow();\n        parent::tearDown();\n    }\n\n    public function testDateCalculation()\n    {\n        $date = Carbon::now();\n        $this-&gt;assertEquals('2025-01-01', $date-&gt;toDateString());\n\n        $future = $date-&gt;addDays(5);\n        $this-&gt;assertEquals('2025-01-06', $future-&gt;toDateString());\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e2\u30c3\u30af\u5316\u3068\u30b9\u30bf\u30d6<\/strong><\/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=\"\">use PHPUnit\\Framework\\TestCase;\nuse Carbon\\Carbon;\n\nclass DateServiceTest extends TestCase\n{\n    public function testDateRangeProcessing()\n    {\n        \/\/ \u6642\u9593\u3092\u56fa\u5b9a\u3057\u3066\u30c6\u30b9\u30c8\n        Carbon::setTestNow(Carbon::create(2025, 1, 1));\n\n        $service = new DateService();\n        $result = $service-&gt;processFutureDate(5);\n\n        $this-&gt;assertEquals(\n            '2025-01-06',\n            $result-&gt;toDateString(),\n            '5\u65e5\u5f8c\u306e\u65e5\u4ed8\u304c\u6b63\u3057\u304f\u8a08\u7b97\u3055\u308c\u3066\u3044\u307e\u305b\u3093'\n        );\n    }\n\n    public function testHolidayProcessing()\n    {\n        \/\/ \u795d\u65e5\u5224\u5b9a\u3092\u30e2\u30c3\u30af\u5316\n        $holidayChecker = $this-&gt;createMock(HolidayChecker::class);\n        $holidayChecker-&gt;method('isHoliday')\n            -&gt;willReturn(true);\n\n        $service = new DateService($holidayChecker);\n        $result = $service-&gt;isWorkingDay(Carbon::now());\n\n        $this-&gt;assertFalse($result);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u3068\u30c7\u30d0\u30c3\u30b0\u6280\u8853\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5b89\u5b9a\u3057\u305f\u904b\u7528\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u52d9\u3067\u306e\u5177\u4f53\u7684\u306a\u6d3b\u7528\u4e8b\u4f8b\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">\u5b9f\u52d9\u3067\u306e\u6d3b\u7528\u4e8b\u4f8b\u3068\u5177\u4f53\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/h2>\n\n\n\n<p>PHP Carbon\u306e\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u3001\u5b9f\u52d9\u3067\u3088\u304f\u906d\u9047\u3059\u308b\u5177\u4f53\u7684\u306a\u30b1\u30fc\u30b9\u3068\u305d\u306e\u5b9f\u88c5\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3067\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u306b\u304a\u3051\u308b\u65e5\u6642\u51e6\u7406\u306e\u5b9f\u88c5\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e88\u7d04\u53ef\u80fd\u6642\u9593\u67a0\u306e\u7ba1\u7406<\/strong><\/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=\"\">use Carbon\\Carbon;\nuse Carbon\\CarbonPeriod;\n\nclass ReservationTimeSlotManager\n{\n    private $businessHours = [\n        'start' =&gt; '10:00',\n        'end' =&gt; '18:00',\n        'interval' =&gt; 30 \/\/ \u5206\u5358\u4f4d\n    ];\n\n    public function getAvailableTimeSlots(Carbon $date): array\n    {\n        \/\/ \u55b6\u696d\u6642\u9593\u5185\u306e\u30bf\u30a4\u30e0\u30b9\u30ed\u30c3\u30c8\u3092\u751f\u6210\n        $startTime = $date-&gt;copy()-&gt;setTimeFromTimeString($this-&gt;businessHours['start']);\n        $endTime = $date-&gt;copy()-&gt;setTimeFromTimeString($this-&gt;businessHours['end']);\n\n        $period = CarbonPeriod::create(\n            $startTime,\n            sprintf('%d minutes', $this-&gt;businessHours['interval']),\n            $endTime\n        );\n\n        $slots = [];\n        foreach ($period as $datetime) {\n            $slots[] = [\n                'start' =&gt; $datetime-&gt;format('H:i'),\n                'end' =&gt; $datetime-&gt;addMinutes($this-&gt;businessHours['interval'])-&gt;format('H:i'),\n                'available' =&gt; $this-&gt;checkAvailability($datetime)\n            ];\n        }\n\n        return $slots;\n    }\n\n    private function checkAvailability(Carbon $datetime): bool\n    {\n        \/\/ \u4e88\u7d04\u72b6\u6cc1\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u30ed\u30b8\u30c3\u30af\n        return true; \/\/ \u5b9f\u969b\u306b\u306f\u4e88\u7d04DB\u3092\u53c2\u7167\u3057\u3066\u5224\u65ad\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$manager = new ReservationTimeSlotManager();\n$availableSlots = $manager-&gt;getAvailableTimeSlots(Carbon::today());<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4e88\u7d04\u306e\u91cd\u8907\u30c1\u30a7\u30c3\u30af<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nclass ReservationValidator\n{\n    public function checkOverlap(Carbon $start, Carbon $end, int $resourceId): bool\n    {\n        \/\/ \u65e2\u5b58\u306e\u4e88\u7d04\u3068\u91cd\u8907\u304c\u306a\u3044\u304b\u30c1\u30a7\u30c3\u30af\n        $existingReservations = Reservation::where('resource_id', $resourceId)\n            -&gt;where(function ($query) use ($start, $end) {\n                $query-&gt;where(function ($q) use ($start, $end) {\n                    \/\/ \u65b0\u898f\u4e88\u7d04\u671f\u9593\u304c\u65e2\u5b58\u4e88\u7d04\u671f\u9593\u3068\u91cd\u306a\u308b\u304b\u30c1\u30a7\u30c3\u30af\n                    $q-&gt;where('start_time', '&lt;', $end)\n                      -&gt;where('end_time', '&gt;', $start);\n                });\n            })-&gt;count();\n\n        return $existingReservations &gt; 0;\n    }\n\n    public function validateReservationTime(Carbon $start, Carbon $end): array\n    {\n        $errors = [];\n\n        \/\/ \u6700\u4f4e\u4e88\u7d04\u6642\u9593\uff08\u4f8b\uff1a30\u5206\uff09\u306e\u30c1\u30a7\u30c3\u30af\n        if ($start-&gt;diffInMinutes($end) &lt; 30) {\n            $errors[] = '\u4e88\u7d04\u6642\u9593\u306f30\u5206\u4ee5\u4e0a\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059';\n        }\n\n        \/\/ \u55b6\u696d\u6642\u9593\u5185\u304b\u30c1\u30a7\u30c3\u30af\n        if ($start-&gt;format('H:i') &lt; '10:00' || $end-&gt;format('H:i') &gt; '18:00') {\n            $errors[] = '\u4e88\u7d04\u306f\u55b6\u696d\u6642\u9593\u5185\uff0810:00-18:00\uff09\u3067\u304a\u9858\u3044\u3057\u307e\u3059';\n        }\n\n        return $errors;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u7d71\u8a08\u30c7\u30fc\u30bf\u4e00\u62ec\u3067\u306e\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u7d71\u8a08\u30c7\u30fc\u30bf\u306e\u51e6\u7406\u306b\u304a\u3051\u308b\u6d3b\u7528\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6708\u6b21\u30ec\u30dd\u30fc\u30c8\u306e\u751f\u6210<\/strong><\/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=\"\">use Carbon\\Carbon;\nuse Carbon\\CarbonPeriod;\n\nclass MonthlyReportGenerator\n{\n    public function generateMonthlyStats(Carbon $startDate, Carbon $endDate): array\n    {\n        $period = CarbonPeriod::create($startDate, '1 month', $endDate);\n        $stats = [];\n\n        foreach ($period as $date) {\n            $monthStart = $date-&gt;copy()-&gt;startOfMonth();\n            $monthEnd = $date-&gt;copy()-&gt;endOfMonth();\n\n            $stats[] = [\n                'month' =&gt; $date-&gt;format('Y-m'),\n                'total_sales' =&gt; $this-&gt;calculateMonthlySales($monthStart, $monthEnd),\n                'average_daily_sales' =&gt; $this-&gt;calculateAverageDailySales($monthStart, $monthEnd),\n                'peak_day' =&gt; $this-&gt;findPeakSalesDay($monthStart, $monthEnd)\n            ];\n        }\n\n        return $stats;\n    }\n\n    private function calculateMonthlySales(Carbon $start, Carbon $end): float\n    {\n        \/\/ \u6708\u9593\u58f2\u4e0a\u306e\u96c6\u8a08\u30ed\u30b8\u30c3\u30af\n        return 0.0; \/\/ \u5b9f\u969b\u306b\u306fDB\u304b\u3089\u96c6\u8a08\n    }\n\n    private function calculateAverageDailySales(Carbon $start, Carbon $end): float\n    {\n        $days = $start-&gt;diffInDays($end) + 1;\n        $totalSales = $this-&gt;calculateMonthlySales($start, $end);\n\n        return $totalSales \/ $days;\n    }\n\n    private function findPeakSalesDay(Carbon $start, Carbon $end): string\n    {\n        \/\/ \u58f2\u4e0a\u306e\u30d4\u30fc\u30af\u65e5\u3092\u7279\u5b9a\u3059\u308b\u30ed\u30b8\u30c3\u30af\n        return $start-&gt;format('Y-m-d'); \/\/ \u5b9f\u969b\u306b\u306fDB\u304b\u3089\u7279\u5b9a\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u30d0\u30c3\u30c1\u51e6\u7406\u3067\u306e\u52b9\u7387\u7684\u306a\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>\u5927\u91cf\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u30d0\u30c3\u30c1\u51e6\u7406\u3067\u306e\u6d3b\u7528\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30a2\u30fc\u30ab\u30a4\u30d6\u51e6\u7406<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nclass DataArchiver\n{\n    private $batchSize = 1000;\n\n    public function archiveOldRecords(): array\n    {\n        $cutoffDate = Carbon::now()-&gt;subYears(2);\n        $stats = ['archived' =&gt; 0, 'failed' =&gt; 0];\n\n        \/\/ \u4e00\u62ec\u51e6\u7406\u7528\u306e\u30a4\u30c6\u30ec\u30fc\u30bf\n        Record::where('created_at', '&lt;', $cutoffDate)\n            -&gt;chunkById($this-&gt;batchSize, function ($records) use (&amp;$stats) {\n                foreach ($records as $record) {\n                    try {\n                        \/\/ \u30a2\u30fc\u30ab\u30a4\u30d6\u51e6\u7406\n                        $this-&gt;archiveRecord($record);\n                        $stats['archived']++;\n                    } catch (\\Exception $e) {\n                        $stats['failed']++;\n                        error_log(\"Archive failed for record {$record-&gt;id}: \" . $e-&gt;getMessage());\n                    }\n                }\n            });\n\n        return $stats;\n    }\n\n    private function archiveRecord($record): void\n    {\n        \/\/ \u5b9f\u969b\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u51e6\u7406\n        ArchivedRecord::create([\n            'original_id' =&gt; $record-&gt;id,\n            'data' =&gt; json_encode($record-&gt;toArray()),\n            'archived_at' =&gt; Carbon::now()\n        ]);\n\n        $record-&gt;delete();\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$archiver = new DataArchiver();\n$result = $archiver-&gt;archiveOldRecords();\necho \"Archived: {$result['archived']}, Failed: {$result['failed']}\\n\";<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5b9a\u671f\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0<\/strong><\/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=\"\">use Carbon\\Carbon;\n\nclass BatchScheduler\n{\n    public function shouldRunBatch(string $batchType): bool\n    {\n        $lastRun = $this-&gt;getLastRunTime($batchType);\n        $now = Carbon::now();\n\n        switch ($batchType) {\n            case 'daily':\n                \/\/ \u524d\u56de\u5b9f\u884c\u304b\u308924\u6642\u9593\u7d4c\u904e\u3057\u3066\u3044\u308b\u304b\n                return $lastRun-&gt;diffInHours($now) &gt;= 24;\n\n            case 'weekly':\n                \/\/ \u9031\u521d\u3081\u306e\u6708\u66dc\u65e5\u304b\u3064\u524d\u56de\u5b9f\u884c\u304b\u30897\u65e5\u7d4c\u904e\u3057\u3066\u3044\u308b\u304b\n                return $now-&gt;isMonday() &amp;&amp; $lastRun-&gt;diffInDays($now) &gt;= 7;\n\n            case 'monthly':\n                \/\/ \u6708\u521d\u3081\u304b\u3064\u524d\u56de\u5b9f\u884c\u304b\u30891\u30f6\u6708\u7d4c\u904e\u3057\u3066\u3044\u308b\u304b\n                return $now-&gt;day === 1 &amp;&amp; $lastRun-&gt;diffInMonths($now) &gt;= 1;\n\n            default:\n                return false;\n        }\n    }\n\n    private function getLastRunTime(string $batchType): Carbon\n    {\n        \/\/ \u6700\u7d42\u5b9f\u884c\u6642\u523b\u306e\u53d6\u5f97\uff08\u5b9f\u969b\u306b\u306fDB\u304b\u3089\u53d6\u5f97\uff09\n        return Carbon::now()-&gt;subDays(7);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3059\u3050\u306b\u6d3b\u7528\u3067\u304d\u308b\u5f62\u3067\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u9069\u5207\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u3067\u3001\u69d8\u3005\u306a\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u306b\u5bfe\u5fdc\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/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],"tags":[],"class_list":{"0":"post-2473","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2473","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=2473"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2473\/revisions"}],"predecessor-version":[{"id":2475,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2473\/revisions\/2475"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}