[{"data":1,"prerenderedAt":314},["ShallowReactive",2],{"$ft6jtkd6xhw3c":3,"$fb8w48ypm54um":263},{"featured":4,"latest":129,"categories":227},[5,14,27,37,48,56,66,76,86,96,106,114,122],{"slug":6,"title":7,"date":8,"excerpt":9,"image":10,"categories":11},"custom-database-tables","Custom DataBase Tables","2015-11-24T02:29:34","You can create the new own table freely in the your WordPress database via this plugin. Then, you can make the management of table or (as view or entry or edit) data in a simple user interface.\\nAlso,","\u002Fassets\u002Fuploads\u002F2016\u002F02\u002Fcdbt-overview.png",[12],{"slug":13,"name":7},"cdbt",{"slug":15,"title":16,"date":17,"excerpt":18,"image":19,"categories":20},"10_php_tips_for_developers","PHP開発者が心得ておくべき10の鉄則","2016-01-11T18:38:09","PHPだけに限った話ではないが、プログラミングを行うに当たって、心得て、準備しておくと失敗が劇的に減る事柄をまとめてある良い記事を見つけたので、私なりの解釈で意訳しつつ、経験則を踏まえてあらためてまとめてみた。 オリジナ…","\u002Fassets\u002Fuploads\u002F2016\u002F01\u002Feyecatch-php-10-tips.jpg",[21,24],{"slug":22,"name":23},"column","コラム",{"slug":25,"name":26},"development","開発関連",{"slug":28,"title":29,"date":30,"excerpt":31,"image":32,"categories":33},"jquery-timeline-v1","2種類の横型タイムラインを簡単に作成できる「jQuery.Timeline」をリリース","2017-05-29T14:55:46","現在開発しているサービスで利用するべく、横型タイムラインを生成できるjQueryプラグインを自作したので、そこだけ単独でリリースしてみた。 ソースコード等はGitHubの方にリリースしてあるので、興味のある方は、そち…","\u002Fassets\u002Fuploads\u002F2017\u002F05\u002Fjquery_timeline_image.png",[34],{"slug":35,"name":36},"jqtl","jQuery.Timeline",{"slug":38,"title":39,"date":40,"excerpt":41,"image":42,"categories":43},"optimize-browser-cache-of-static-resources","更新されたJS、CSS、画像のみブラウザキャッシュを破棄して読み込ませる","2018-01-31T15:47:47","WEBサービスの保守や開発をやっていると、JavaScriptやスタイルシート、画像などの静的リソースを更新した際、しばしば「確認したけど、更新されてないよ」とか云われて、「ブラウザのキャッシュを消してからもう一度見て…",null,[44,47],{"slug":45,"name":46},"codes","コード集",{"slug":25,"name":26},{"slug":49,"title":50,"date":51,"excerpt":52,"image":53,"categories":54},"jquery-timeline","jQuery.Timeline version2 – full documentation","2019-03-04T20:40:48","Plugin Overview The jQuery.Timeline plugin provides you two types of the horizontal timeline. You can create a…","\u002Fassets\u002Fuploads\u002F2019\u002F03\u002Fjquery.timeline_v2.jpg",[55],{"slug":35,"name":36},{"slug":57,"title":58,"date":59,"excerpt":60,"image":61,"categories":62},"released-the-sloth","Released the Sloth of mobile-first CSS micro framework!","2019-04-16T18:04:25","I released the “Sloth” that is mobile-first CSS micro framework. I have long used frontend framewo…","\u002Fassets\u002Fuploads\u002F2019\u002F04\u002Fsloth_doc_head.png",[63],{"slug":64,"name":65},"sloth","Sloth",{"slug":67,"title":68,"date":69,"excerpt":70,"image":71,"categories":72},"challenge-to-conceal-the-wordpress-site","WordPressサイトを徹底的に秘匿化する","2020-02-02T23:59:58","私は自分の個人サイトをはじめ、仕事でもWordPressサイトを運用している。WordPressは気軽にサイトを立ち上げられてカスタマイズも簡単な、素晴らしいオープンソースなのだが、世界中で使われまくっているその知名度…","\u002Fassets\u002Fuploads\u002F2020\u002F02\u002Fshutterstock_1878005929.jpg",[73],{"slug":74,"name":75},"wordpress","WordPress関連",{"slug":77,"title":78,"date":79,"excerpt":80,"image":81,"categories":82},"what-is-forkor","Made a shortened URL app called Forkor","2020-07-07T22:27:01","What’s Forkor? Forkor is a service that provides a shortened URL feature that allows you to redirect any…","\u002Fassets\u002Fuploads\u002F2020\u002F07\u002Fforkor.png",[83],{"slug":84,"name":85},"forkor","Forkor",{"slug":87,"title":88,"date":89,"excerpt":90,"image":91,"categories":92},"manual-about-svg-japan","インタラクティブな日本地図を生成するJSプラグイン「SVG Japan」","2020-11-16T21:19:58","各都道府県をそれぞれ選択・クリック可能なインタラクティブな日本地図を生成するネイティブJavaScript建てのプラグイン「SVG Japan」を作ったので、その紹介と使い方をまとめておく。ちなみにソースコードはgit…","\u002Fassets\u002Fuploads\u002F2020\u002F11\u002Fsvg-japan.png",[93],{"slug":94,"name":95},"svg-japan","SVG Japan",{"slug":97,"title":98,"date":99,"excerpt":100,"image":101,"categories":102},"wp-ignitor-plugin-to-conceal-wordpress-site","WordPressサイトを秘匿化するプラグイン「WP Ignitor」","2021-01-19T15:28:21","以前「WordPressサイトを徹底的に秘匿化する」という記事で、WordPress建てのサイトを秘匿化する方法を取り上げたのだが、あれをサイト構築時に毎度実施するとなるととても労力が必要であった。そこで、もっとお手軽…","\u002Fassets\u002Fuploads\u002F2021\u002F01\u002Fbanner-1554x500-1.png",[103],{"slug":104,"name":105},"wp-ignitor","WPイグナイタ",{"slug":107,"title":108,"date":109,"excerpt":110,"image":111,"categories":112},"tastewp","無料でWordPressサイトを複数作成できるWEBサービス「TasteWP」","2021-03-25T20:21:59","私が日本語翻訳に協力しているWEBサービス「TasteWP」について紹介しようと思う。 https:\u002F\u002Ftastewp.com このサービス、サインアップすることなく無料で自分用のWordPressサイトを作れるとい…","\u002Fassets\u002Fuploads\u002F2021\u002F03\u002FTasteWP_screenshot.png",[113],{"slug":74,"name":75},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":120},"monster-hunter-rise-skill-simulator","モンハンライズのスキルシミュレータを作ってみた！","2021-06-28T20:24:52","コラムで連載していたNintendo Switch版『モンスターハンターライズ』のスキルシミュレータ開発がやっと一段落して一通り完了した。いやぁ、記事書きながら同時並行で開発すると思っていた以上に時間がかかるもんだなぁ…","\u002Fassets\u002Fuploads\u002F2021\u002F06\u002Fmhrss_v100.png",[121],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":127},"comparison-of-javascript-date-libraries","JavaScriptの日時ライブラリを比較してみた","2021-07-28T22:39:19","ネイティブJavaScriptで日時を取り扱う場合、ビルトインされているDateオブジェクトを使うことになるのだが、このDateオブジェクトは取り扱いにクセが多く、直感的に日時を操作できない点でも有名である。そこで、専…",[128],{"slug":25,"name":26},[130,141,153,165,175,184,192,195,198,206,213,220],{"slug":131,"title":132,"date":133,"excerpt":134,"image":135,"categories":136},"pulllog_launched","ガチャ履歴を記録・分析できるWebサービス「PullLog」","2025-08-22T13:05:30","このたび、新しい個人開発サービスとして 「PullLog（プルログ）」 をリリースした。 URLはこちら https:\u002F\u002Fpulllog.net PullLogとは？ PullLogは、ソーシャルゲームのガチャ履歴を記録…","\u002Fassets\u002Fuploads\u002F2025\u002F08\u002Fpulllog_stats_jp.png",[137,140],{"slug":138,"name":139},"industries","プロダクト",{"slug":25,"name":26},{"slug":142,"title":143,"date":144,"excerpt":145,"image":146,"categories":147},"mockapi-php-openapi-schema-generation","モックAPIのレスポンスから OpenAPI 3.0 スキーマを自動生成するPHPツール","2025-04-17T09:31:52","私自身がそうなのですが、OpenAPI仕様書を毎回手作業で書いていて「面倒だな」と思ったことはありませんか？ そんな（私と）あなたにぴったりのツールがあります。 レスポンスの例さえ用意すれば、OpenAPI 3.0 スキ…","\u002Fassets\u002Fuploads\u002F2025\u002F04\u002Fswaggerui-preview.png",[148,151,152],{"slug":149,"name":150},"mockapi-php","MockAPI-PHP",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":154,"title":155,"date":156,"excerpt":157,"image":158,"categories":159},"ambient_playlist_customize","Ambientでメメントモリのラメントプレイヤーを作る","2023-11-30T17:32:39","「Ambient」の最新バージョン 1.2.0で実装した「疑似フェーダー」機能を使って、ソーシャルゲーム「メメントモリ」のYouTube公式チャンネルで公開されているMVを集約したラメント専用プレイヤーを作ってみた。 ラ…","\u002Fassets\u002Fuploads\u002F2023\u002F11\u002Fambient_mememori_1.png",[160,163,164],{"slug":161,"name":162},"ambient","Ambient",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":166,"title":167,"date":168,"excerpt":169,"image":170,"categories":171},"released_ambient_demo_version","Ambientメディアプレイヤーのクラウド版デモを公開","2023-11-22T13:47:36","つい先日「Ambient」の最新バージョン 1.1.0をリリースして、それに合わせてクラウド版デモサイトも公開してみた。 なお、クラウド版デモでローカルのホストコンピュータのメディアを再生するには、そのメディアファイルも…","\u002Fassets\u002Fuploads\u002F2023\u002F10\u002FAmbientMediaPlayer-typologo.png",[172,173,174],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":176,"title":177,"date":178,"excerpt":179,"image":170,"categories":180},"ambient-media-player","YouTubeと自分のPC内メディアを同時に再生できるメディアプレイヤーを作ってみた","2023-10-20T00:00:25","私はよくPCで何か作業をするときには音楽を垂れ流していることが多い。 そういう時にかける曲は、手持ちのアルバムCD等からPCに取り込んだ音源だったり、さらにはYouTubeの動画だったりとメディアや再生環境がバラバラだ。…",[181,182,183],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":185,"title":186,"date":187,"excerpt":188,"image":189,"categories":190},"what-is-the-sunorhc","Sunorhc is a date-time library for JavaScript","2021-08-25T22:55:55","Sunorhc is a lightweight library for handling dates and times for JavaScript. The library wraps a native JavaS…","\u002Fassets\u002Fuploads\u002F2021\u002F08\u002Fshutterstock_1091212919_resized.jpg",[191],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":193},[194],{"slug":25,"name":26},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":196},[197],{"slug":25,"name":26},{"slug":199,"title":200,"date":201,"excerpt":202,"image":203,"categories":204},"mhrise-skill-simulator-creation-chapter-12","モンスターハンターライズのスキルシミュレータを作ってみる！ 第12回","2021-06-21T13:11:46","今回は「マイセット登録」と護石データの「エクスポート／インポート」機能の追加をしていく。折り良く（悪く？）「FF7リメイク・インターグレード」や「FORTNITEシーズン7」が出たこともあって、そっちをプレイしてたらこ…","\u002Fassets\u002Fuploads\u002F2021\u002F04\u002Fb6ca09e9a7f6faf27641f62dabe64c6ff97b4f326aa478379e3c112aa28eb9ab.jpg",[205],{"slug":22,"name":23},{"slug":207,"title":208,"date":209,"excerpt":210,"image":203,"categories":211},"mhrise-skill-simulator-creation-chapter-11","モンスターハンターライズのスキルシミュレータを作ってみる！ 第11回","2021-06-07T14:52:31","さて、今回はユーザー個別データの管理部分を開発していく予定だが、まずその前にやっておくことがある。 新スキル「風雷合一」に対応する Ver.3.0の大型無料アップデートで追加された新スキルに「風雷合一」というのがある…",[212],{"slug":22,"name":23},{"slug":214,"title":215,"date":216,"excerpt":217,"image":203,"categories":218},"mhrise-skill-simulator-creation-chapter-10","モンスターハンターライズのスキルシミュレータを作ってみる！ 第10回","2021-06-02T00:29:10","今回は、護石管理画面の作成だ。この護石管理では、ユーザーごとに護石の登録を行う機能と、登録した護石を削除する機能を持つ仕様になる。この画面から登録した護石データはデータベースに格納するので、フロントエンド側からのリクエス…",[219],{"slug":22,"name":23},{"slug":221,"title":222,"date":223,"excerpt":224,"image":203,"categories":225},"mhrise-skill-simulator-creation-chapter-9","モンスターハンターライズのスキルシミュレータを作ってみる！ 第9回","2021-05-22T23:56:27","さて、今回はVuexによるデータ・キャッシュの実装だ。一度データベースから読み込んだデータをフロントエンド側で再利用可能なストアに格納することで、データベースへの接続回数を減らしてシステム負荷を下げるとともに、UX的な…",[226],{"slug":22,"name":23},[228,230,232,236,238,239,240,241,242,244,247,248,250,252,254,258,261],{"slug":161,"name":162,"count":229},3,{"slug":13,"name":7,"count":231},7,{"slug":233,"name":234,"count":235},"csnp","Custom Sticky Notes",2,{"slug":84,"name":85,"count":237},1,{"slug":35,"name":36,"count":229},{"slug":149,"name":150,"count":237},{"slug":64,"name":65,"count":237},{"slug":94,"name":95,"count":237},{"slug":74,"name":75,"count":243},37,{"slug":245,"name":246,"count":237},"wpqt","WP Qiita",{"slug":104,"name":105,"count":237},{"slug":22,"name":23,"count":249},29,{"slug":45,"name":46,"count":251},16,{"slug":138,"name":139,"count":253},5,{"slug":255,"name":256,"count":257},"lifelog","ライフログ",64,{"slug":259,"name":260,"count":235},"uncategorized","未分類",{"slug":25,"name":26,"count":262},45,{"type":264,"post":265},"post",{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":266,"modified":268,"html":269,"tags":270,"related":285,"prev":308,"next":311},[267],{"slug":25,"name":26},"2021-08-25T23:19:47","\u003Cp>　ネイティブJavaScriptで日時を取り扱う場合、ビルトインされているDateオブジェクトを使うことになるのだが、このDateオブジェクトは取り扱いにクセが多く、直感的に日時を操作できない点でも有名である。そこで、専らサードパーティ製のプラグイン\u003Ca href=\"https:\u002F\u002Fmomentjs.com\u002F\">\u003Cstrong>moment.js\u003C\u002Fstrong>\u003C\u002Fa>や\u003Ca href=\"https:\u002F\u002Fday.js.org\u002F\">\u003Cstrong>dayjs\u003C\u002Fstrong>\u003C\u002Fa>を使うのが一般的になっている。最新では、オワコン宣言したmoment.jsの後継と云われる\u003Ca href=\"https:\u002F\u002Fmoment.github.io\u002Fluxon\u002F\">\u003Cstrong>Luxon\u003C\u002Fstrong>\u003C\u002Fa>や、次期JavaScriptへの実装が期待されている\u003Ca href=\"https:\u002F\u002Ftc39.es\u002Fproposal-temporal\u002Fdocs\u002Findex.html#introduction\">\u003Cstrong>Temporal\u003C\u002Fstrong>\u003C\u002Fa>モジュールなどが出て来ていて、では結局どれを使うのが良いのか？　という悩みを抱えている人もいるのではないだろうか。私がまさにその問題にぶち当たった次第である。\u003Cbr \u002F>\n　そこで、それぞれの日時処理用プラグインやモジュール（本稿では統一してライブラリと称することにする）を比較してみることにした。\u003C\u002Fp>\n\u003Ch2>各種日時ライブラリの比較\u003C\u002Fh2>\n\u003Cp>　まず、ネイティブJSの\u003Cstrong>Dateオブジェクト\u003C\u002Fstrong>と、\u003Cstrong>Luxon\u003C\u002Fstrong>、\u003Cstrong>dayjs\u003C\u002Fstrong>、\u003Cstrong>Temporal\u003C\u002Fstrong>をそれぞれ仕様や機能別に単純に比較してみた結果を一覧化してみた。\u003Cbr \u002F>\n　オワコン宣言されているmoment.jsについては、公式でも「もう使わないで」と謳われているので除外してある。またTemporalについては仕様策定中とあって、実装が確定していない（公式GitHubをwatchしていると毎日のように議論が起票されている）ので、ここでは2020年7月22日時点での実装内容なので注意が必要だ。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>比較項目\u003C\u002Fth>\n\u003Cth align=\"center\">Date Object\u003C\u002Fth>\n\u003Cth align=\"center\">Luxon\u003C\u002Fth>\n\u003Cth align=\"center\">dayjs\u003C\u002Fth>\n\u003Cth align=\"center\">Temporal\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>バージョン(2021\u002F7\u002F22時点)\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">2.0.1\u003C\u002Ftd>\n\u003Ctd align=\"center\">1.10.6\u003C\u002Ftd>\n\u003Ctd align=\"center\">0.1.0\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>公式サイト\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FDate\">MDN\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fmoment.github.io\u002Fluxon\u002F\">moment.github.io\u002Fluxon\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fday.js.org\u002Fen\u002F\">day.js.org\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Ftc39.es\u002Fproposal-temporal\u002Fdocs\u002F\">tc39.es\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>日本語ドキュメント\u003C\u002Ftd>\n\u003Ctd align=\"center\">あり\u003C\u002Ftd>\n\u003Ctd align=\"center\">なし\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fiamkun\u002Fdayjs\u002Fblob\u002Fdev\u002Fdocs\u002Fja\u002FREADME-ja.md\">READMEのみ\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd align=\"center\">なし\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>コア\u003C\u002Ftd>\n\u003Ctd align=\"center\">（ネイティブ）\u003C\u002Ftd>\n\u003Ctd align=\"center\">Dateのラッパー\u003C\u002Ftd>\n\u003Ctd align=\"center\">Dateのラッパー\u003C\u002Ftd>\n\u003Ctd align=\"center\">独自モデル\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>インストール（npm）\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>npm i --save luxon\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>npm i --save dayjs\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">※\u003Ca href=\"\">詳細は後述\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>CDN\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fcdnjs.com\u002Flibraries\u002Fluxon\">配布あり\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fcdnjs.com\u002Flibraries\u002Fdayjs\">配布あり\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd align=\"center\">×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ファイルサイズ（minify後）\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">68kB\u003C\u002Ftd>\n\u003Ctd align=\"center\">6.34kB（コアのみ）\u003C\u002Ftd>\n\u003Ctd align=\"center\">286kB（配布版にはminifyなし）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>プリミティブ値\u003C\u002Ftd>\n\u003Ctd align=\"center\">UNIX時間（ミリ秒）のNumber\u003C\u002Ftd>\n\u003Ctd align=\"center\">UNIX時間（ミリ秒）のNumber（Dateのラッパーなので）\u003C\u002Ftd>\n\u003Ctd align=\"center\">UNIX時間（ミリ秒）のNumber（Dateのラッパーなので）\u003C\u002Ftd>\n\u003Ctd align=\"center\">UNIX時間（ナノ秒）のBigInt\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>保持値特性\u003C\u002Ftd>\n\u003Ctd align=\"center\">ミュータブル\u003C\u002Ftd>\n\u003Ctd align=\"center\">イミュータブル\u003C\u002Ftd>\n\u003Ctd align=\"center\">イミュータブル\u003C\u002Ftd>\n\u003Ctd align=\"center\">イミュータブル\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>タイムゾーン対応\u003C\u002Ftd>\n\u003Ctd align=\"center\">オフセットのみ\u003C\u002Ftd>\n\u003Ctd align=\"center\">フルサポート（IANA Time Zone Database と独自拡張）\u003C\u002Ftd>\n\u003Ctd align=\"center\">要プラグイン\u003C\u002Ftd>\n\u003Ctd align=\"center\">フルサポート（IANA Time Zone Database か TZ database 準拠）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>DST対応\u003C\u002Ftd>\n\u003Ctd align=\"center\">特になし\u003C\u002Ftd>\n\u003Ctd align=\"center\">サポート済み\u003C\u002Ftd>\n\u003Ctd align=\"center\">なし\u003C\u002Ftd>\n\u003Ctd align=\"center\">サポート済み\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>カレンダー（歴）対応\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fja\u002Fdocs\u002Forphaned\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FIntl\u002FLocale\u002Fcalendar\">Intl.Locale\u003C\u002Fa>によるサポート\u003C\u002Ftd>\n\u003Ctd align=\"center\">グレゴリオ暦とISO Week暦をサポート\u003C\u002Ftd>\n\u003Ctd align=\"center\">要プラグイン\u003C\u002Ftd>\n\u003Ctd align=\"center\">サポートあり（太陰太陽暦など）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>使用法（コード）\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>const  { DateTime }  =  require(\"luxon\")\u003C\u002Fcode> もしくは \u003Ccode>&lt;script src=\"luxon.js\"&gt;&lt;\u002Fscript&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>const dayjs = require('dayjs')\u003C\u002Fcode> もしくは \u003Ccode>&lt;script src=\"dayjs.min.js\"&gt;&lt;\u002Fscript&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>const { Temporal } = require('proposal-temporal')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>初期化\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>new Date()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>const DateTime = luxon.DateTime\u003C\u002Fcode>など\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>dayjs()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>Temporal\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>現在日時\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>const now = new Date()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>const now = DateTime.now()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>const now = dayjs()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>const now = Temporal.Now\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>フォーマッター\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FIntl\u002FDateTimeFormat\u002FDateTimeFormat\">Intl.DateTimeFormat()\u003C\u002Fa>によるサポート\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FIntl\u002FDateTimeFormat\u002FDateTimeFormat\">Intl.DateTimeFormat()\u003C\u002Fa>依存の独自拡張\u003C\u002Ftd>\n\u003Ctd align=\"center\">独自書式（\u003Ccode>YYYY\u002FMM\u002FDD\u003C\u002Fcode>等）\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FIntl\u002FDateTimeFormat\u002FDateTimeFormat\">Intl.DateTimeFormat()\u003C\u002Fa>依存の独自拡張\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>国際化\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FIntl\u002FDateTimeFormat\u002FDateTimeFormat\">Intl.DateTimeFormat()\u003C\u002Fa>によるサポート\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FIntl\u002FDateTimeFormat\u002FDateTimeFormat\">Intl.DateTimeFormat()\u003C\u002Fa>によるサポート\u003C\u002Ftd>\n\u003Ctd align=\"center\">要プラグイン\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FIntl\u002FDateTimeFormat\u002FDateTimeFormat\">Intl.DateTimeFormat()\u003C\u002Fa>によるサポート\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>日時比較\u003C\u002Ftd>\n\u003Ctd align=\"center\">なし\u003C\u002Ftd>\n\u003Ctd align=\"center\">インスタンスメソッド（\u003Ccode>hasSame\u003C\u002Fcode>等）\u003C\u002Ftd>\n\u003Ctd align=\"center\">インスタンスメソッド（\u003Ccode>diff\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003Ctd align=\"center\">インスタンスメソッド（\u003Ccode>compare\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>日時更新\u003C\u002Ftd>\n\u003Ctd align=\"center\">Setter\u003C\u002Ftd>\n\u003Ctd align=\"center\">インスタンスメソッド（\u003Ccode>plus\u003C\u002Fcode>, \u003Ccode>minus\u003C\u002Fcode>等）\u003C\u002Ftd>\n\u003Ctd align=\"center\">インスタンスメソッド（\u003Ccode>add\u003C\u002Fcode>, \u003Ccode>subtract\u003C\u002Fcode>等）\u003C\u002Ftd>\n\u003Ctd align=\"center\">インスタンスメソッド（\u003Ccode>add\u003C\u002Fcode>, \u003Ccode>subtract\u003C\u002Fcode>等）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>期間算出\u003C\u002Ftd>\n\u003Ctd align=\"center\">なし\u003C\u002Ftd>\n\u003Ctd align=\"center\">Duration API（\u003Ccode>Duration.fromObject({ hours:  2, minutes:  7  })\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003Ctd align=\"center\">要プラグイン（\u003Ccode>duration\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003Ctd align=\"center\">インスタンスメソッド（\u003Ccode>Duration\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>二点間の間隔\u003C\u002Ftd>\n\u003Ctd align=\"center\">なし\u003C\u002Ftd>\n\u003Ctd align=\"center\">Interval API（\u003Ccode>Interval.fromDateTimes(now, later)\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003Ctd align=\"center\">要プラグイン（\u003Ccode>isBetween\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003Ctd align=\"center\">インスタンスメソッド（\u003Ccode>Duration\u003C\u002Fcode>, \u003Ccode>until\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>拡張性\u003C\u002Ftd>\n\u003Ctd align=\"center\">あり\u003C\u002Ftd>\n\u003Ctd align=\"center\">不明（公式ドキュメントには記述なし）\u003C\u002Ftd>\n\u003Ctd align=\"center\">高い（プラグイン追加が可能）\u003C\u002Ftd>\n\u003Ctd align=\"center\">未知\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ライセンス\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">MIT\u003C\u002Ftd>\n\u003Ctd align=\"center\">MIT\u003C\u002Ftd>\n\u003Ctd align=\"center\">BSD-3-Clause\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3>補足: Temporalのインストール手順\u003C\u002Fh3>\n\u003Cp>　Temporalは現在策定中のため、正式なインストール手順が公開されていない（GitHubのレポジトリのREADMEから奥深くに辿って行くとちょっとだけ記載されている程度だ）。現状では、評価バージョンであるPolyfillを自前でビルドして使うことになる。その手順を紹介しておこう。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">git\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> clone\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> https:\u002F\u002Fgithub.com\u002Ftc39\u002Fproposal-temporal.git\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> temporal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">cd\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> temporal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">npm\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> run\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> build:polyfill\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　これでpolyfillディレクトリ内に\u003Ccode>script.js\u003C\u002Fcode>と\u003Ccode>script.js.map\u003C\u002Fcode>がビルドされる。ビルドされたスクリプトはMinifyされていないので、520kBオーバーの巨大スクリプトになる。このファイルが、Temporalの実体とそのソースマップである。これをHTML側で読み込むことでTemporalがJavaScriptのグローバルスコープ内で使用できるようになる。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#85E89D\">script\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> src\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u002Fpath\u002Fto\u002Ftemporal\u002Fpolifill\u002Fscript.js\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#85E89D\">script\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#85E89D\">script\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> current\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> Temporal.Now\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(current.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">timeZone\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">().id)\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"Asia\u002FTokyo\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(current.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">plainDate\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'japanese'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">).era)\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"reiwa\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(current.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">instant\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">().\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"2021-07-22T04:22:31.771751767Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#85E89D\">script\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　実際の使用例は上記のような感じだ。\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Cp>　さて、ライブラリの比較はここまで。\u003Cbr \u002F>\n　次に、それぞれのライブラリを実際に使用してみての私個人の所感をまとめてみた。\u003C\u002Fp>\n\u003Ch2>Luxonの所感\u003C\u002Fh2>\n\u003Cp>　今回比較したライブラリの中では、最もモダンでスマートなパッケージという感じだった。moment.jsの後継と謳っていることもあって、個人的にmoment.jsのフォーマッター仕様が苦手だったことから、そこが踏襲されていると嫌だなぁ……と思っていたが、幸いにもネイティブJSのIntl APIに準拠する形に落ち着いていたので好感度UPだったw\u003Cbr \u002F>\n　タイムゾーンや更新系、算出系のインスタンスメソッドが豊富で、それらが元からコアにビルトインされているので、Luxonの1ファイルを読み込むだけでJavaScriptの日時処理は全てまかなえてしまうのがお手軽である。\u003Cbr \u002F>\n　さらに、ファイルサイズも小さめで、全体的に無難で隙がない優秀なライブラリと云ったところだ。\u003C\u002Fp>\n\u003Ch2>DAYJSの所感\u003C\u002Fh2>\n\u003Cp>　とにかくファイルサイズが小さいのがウリだ。それゆえ、コアファイルに含まれる処理はかなり限定的である。ただ、JavaScript側で大仰な日時処理を必要としないのであれば、ネットワーク帯域を圧迫しない点でこのライブラリは最良であると云えるだろう。\u003Cbr \u002F>\n　公式プラグインを追加することで様々な拡張処理に対応できるのも魅力的で、リッチな日時処理が必要であっても、必要最小限のプラグイン追加で機能が実装できるので、ネットワーク帯域を限界まで最適化したいアプリなどでは光るものがある。とはいえ、必要な機能を選別して都度プラグインをインポートする手間は面倒でもあり、国際化などで多言語対応を求められると各言語ごとのプラグインを読み込む煩雑なデプロイが必要になる可能性もある。また、拡張プラグインを多用するようなアプリなどでは極小ファイルサイズのメリットが薄れてしまうだろう。\u003Cbr \u002F>\n　個人的にはフォーマッター仕様がmoment.js互換なのがいただけない点である。逆に、moment.jsからの乗り換えであれば、後継と云われるLuxonよりこちらのDAYJSの方が適しているかも知れない。\u003C\u002Fp>\n\u003Ch2>Temporalの所感\u003C\u002Fh2>\n\u003Cp>　前者2つのライブラリがネイティブJSのDateオブジェクトのラッパーであったのと比較すると、こちらは完全独立型のモジュールである。Dateオブジェクトの弱点であるタイムゾーン処理や各種比較・算出処理にも対応していて、これがネイティブJavaScriptの標準として追加されたら幸せになれそうな予感が半端ない。\u003Cbr \u002F>\n　ただ、現状ではファイルサイズが大きすぎて商用としては使えない（ビルドしたスクリプトをMinifyしてみたが、それでも286kBオーバーだったので、かなり重い）。\u003Cbr \u002F>\n　仕様的に国際化部分はIntl APIに準拠しているので、これが今後の日時国際化の標準仕様になるのだろうと思われる。特筆すべきはエポックタイムをナノ秒まで算出できるところだ。おそらくここまで精緻な時間が必要なケースは稀だろうが、面白い仕様である（まぁ、ナノ秒のBigIntを処理するコードなんて書きたくないが……w）。\u003Cbr \u002F>\n　使い勝手的にはインスタンスメソッド名が長すぎるのが難点なのと、有用なフォーマッターを実装していないところが気になるところだ。まぁ、策定中でもあるし、今後どのように改善されていくのかが非常に気になるモジュールではある。\u003C\u002Fp>\n\u003Ch2>Dateオブジェクトの不満点への対応\u003C\u002Fh2>\n\u003Cp>　ここからは一部個人的な嗜好も含まれるのだが、ネイティブJavaScriptのDateオブジェクトを取り扱う上でよく難儀するケースに対して、それぞれのライブラリでの対応がどのようになっているかを調査してみた。\u003C\u002Fp>\n\u003Ch3>イミュータブル性\u003C\u002Fh3>\n\u003Cp>　一度インスタンス化した日時オブジェクトの値については、プリミティブ値として不変（イミュータブル）であることが望ましい。日時の利用ケース的に、できる限りSetterによるプリミティブ値の上書きを抑止して、インスタンスメソッドによる値の更新時にはその都度新たなインスタンスとして値を返すような仕組みが最適だと思うのだ。つまりは、起点となる日時が変動しないことで、どんな処理からでも起点日時を安定して参照できるようになり、それが処理全体の不確実性を低下させられるメリットを得られる。\u003Cbr \u002F>\n　その点、ネイティブJSのDateオブジェクト以外は3つともイミュータブル性を持っているので、どれを選んでも日時の取り扱いは格段にし易くなっている。\u003C\u002Fp>\n\u003Ch4>検証: Dateオブジェクト\u003C\u002Fh4>\n\u003Cp>　Dateオブジェクトでは、インスタンスとして保持される日時データがミュータブルな値（状態が変化する値）であることを、実例で示してみる。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> oneDate \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2021\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">5\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">9\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">12\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>──と定義した日時データ\u003Ccode>oneDate\u003C\u002Fcode>は、システムタイムゾーンが\u003Ccode>Asia\u002FTokyo\u003C\u002Fcode>（日本標準時）だった場合にUTCで\u003Ccode>2021-06-09T03:00:00.000Z\u003C\u002Fcode>となる。この日時を1日進めてみよう。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">oneDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">setDate\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(oneDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getDate\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">() \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(oneDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"2021-06-10T03:00:00.000Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　まぁ、Setter使ってオブジェクト内のプリミティブ値を上書きしているので、挙動的には至極真っ当で、ここに不満を云っても仕方ない（オブジェクトのプリミティブ値というのは基本不変な値なのだが、Setterによる上書きは許可されるのだ）。そしてこの時点で\u003Ccode>oneDate\u003C\u002Fcode>が保持している日時データは、初期値より1日進んだプリミティブ値となる。そのため、これ以降に初期値としての日時が欲しい場合、再びSetterで1日前の日時データを作成するか、もとから初期日時をconstとして変更不可を宣言した定数に格納しておく必要がある（まぁ、JavaScriptではLint等でルールを縛らないと定数でも変更できてしまうが……）。通常は後者だろう（下記参照）。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> baseDate\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2021\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">5\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">9\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">12\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      DAY_MS\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 1\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> *\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 24\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> *\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 60\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> *\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 60\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> *\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 1000\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> oneDate \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getTime\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">() \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> DAY_MS\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(oneDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"2021-06-10T03:00:00.000Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　なんともまどろっこしいうえに、JavaScript自体にシステム的な不変の縛りがないため、定数baseDateのプリミティブ値が不変であることが以降の処理で担保されない不安定さが残る。\u003Cbr \u002F>\n　もっと実践的な例として、現在日から一週間分の日付を取得して、それを配列に格納してみる。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> baseDate\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weekDates \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> []\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">  add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">push\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">setDate\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getDate\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">() \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> add)))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">map\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FFAB70\">date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 結果: [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 0:  \"2021-07-28T12:53:24.355Z\" &#x3C;- baseDateが 2021-07-28 +0日で上書きされる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1:  \"2021-07-29T12:53:24.355Z\" &#x3C;- baseDateは 2021-07-28 +1日で上書きされる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 2:  \"2021-07-31T12:53:24.355Z\" &#x3C;- baseDateは 2021-07-29 +2日で上書きされる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 3:  \"2021-08-03T12:53:24.355Z\" &#x3C;- baseDateは 2021-07-31 +3日で上書きされる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 4:  \"2021-08-07T12:53:24.355Z\" &#x3C;- baseDateは 2021-08-03 +4日で上書きされる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 5:  \"2021-08-12T12:53:24.355Z\" &#x3C;- baseDateは 2021-08-07 +5日で上書きされる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 6:  \"2021-08-18T12:53:24.355Z\" &#x3C;- baseDateは 2021-08-12 +6日で上書きされる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 7:  \"2021-08-25T12:53:24.355Z\" &#x3C;- baseDateは 2021-08-18 +7日で上書きされる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"2021-08-25T12:53:24.355Z\" &#x3C;- 起点日が変わっている\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　Dateオブジェクトがミュータブルな値を持つことを考慮せずに、上記のように直感的な処理でコーディングしてしまうと、思わぬ結果となって混乱してしまうだろうw\u003Cbr \u002F>\n　期待値通りの処理結果を得るためには、\u003Ccode>for\u003C\u002Fcode>ループ内にて定数baseDateとは別に起点日時をクローンしたテンポラリ変数を定義して、それに対して日数加算を行う必要がある。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">  add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> tempDate \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">valueOf\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F `let tempDate = baseDate` ではダメ\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">push\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(tempDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">setDate\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(tempDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getDate\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">() \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> add)))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　なお、JavaScriptではオブジェクトを変数に単純に代入してしまうと、プリミティブ値は参照扱いとなり実体はbaseDateの値になってしまうので、baseDateのプリミティブ値を使って新たにDateオブジェクトのインスタンスをtempDateに格納しないと完全なクローンができないのがさらにややこしい。また日付値の加算等ができるインスタンスメソッドもないので、愚直にGetterで値を取って加工してSetterで上書きしてあげる必要があるのも面倒だ。なんとももどかしい上に、処理のオーバーヘッドも高くて、およそ褒められる点が見つからない。\u003C\u002Fp>\n\u003Ch4>検証: Luxon\u003C\u002Fh4>\n\u003Cp>　では、Luxonで同じように現在日から一週間分の日付を取得してみよう。Luxonの場合、インスタンスメソッド\u003Ccode>plus()\u003C\u002Fcode>を使えるので簡単だ（減算時は\u003Ccode>minus()\u003C\u002Fcode>を使う）。このメソッドの戻り値は独立した日付インスタンスになるので、起点日を格納したbaseDateは処理後も不変（イミュータブル）である。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> baseDate\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> DateTime.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">now\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weekDates \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> []\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">push\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">plus\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">({days: add}))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">map\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FFAB70\">date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 結果: [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 0: \"2021-07-28T21:56:57.886+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1: \"2021-07-29T21:56:57.886+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 2: \"2021-07-30T21:56:57.886+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 3: \"2021-07-31T21:56:57.886+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 4: \"2021-08-01T21:56:57.886+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 5: \"2021-08-02T21:56:57.886+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 6: \"2021-08-03T21:56:57.886+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 7: \"2021-08-04T21:56:57.886+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"2021-07-28T21:56:57.886+09:00\" &#x3C;- 起点日は変わっていない\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>検証: DAYJS\u003C\u002Fh4>\n\u003Cp>　DAYJSの場合、日時の加減計算はインスタンスメソッドの\u003Ccode>add()\u003C\u002Fcode>と\u003Ccode>subtract()\u003C\u002Fcode>で簡単に行える。このメソッドの戻り値は新規日時インスタンスになるので、起点日を格納したbaseDateは処理後も不変（イミュータブル）である。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> baseDate\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> dayjs\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weekDates \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> []\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">push\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">add\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(add, \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'day'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">map\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FFAB70\">date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">  =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">  date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 結果: [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 0:  \"2021-07-28T12:58:53.287Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1:  \"2021-07-29T12:58:53.287Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 2:  \"2021-07-30T12:58:53.287Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 3:  \"2021-07-31T12:58:53.287Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 4:  \"2021-08-01T12:58:53.287Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 5:  \"2021-08-02T12:58:53.287Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 6:  \"2021-08-03T12:58:53.287Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 7:  \"2021-08-04T12:58:53.287Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"2021-07-28T12:58:53.287Z\" &#x3C;- 起点日は変わっていない\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>検証: Temporal\u003C\u002Fh4>\n\u003Cp>　Temporalでの日時の加減計算はインスタンスメソッドの\u003Ccode>add()\u003C\u002Fcode>と\u003Ccode>subtract()\u003C\u002Fcode>で行えるが、加減値はDuration APIで初期化する必要がある。また、起点日時としてインスタンス化した書式がそのまま戻り値となる。ちょっとクセが強いが、起点日時のイミュータブル性は確保されている。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> baseDate\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> Temporal.Now.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">zonedDateTimeISO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weekDates \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> []\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; add\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">push\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">add\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(Temporal.Duration.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">from\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">({days: add})))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(weekDates.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">map\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FFAB70\">date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 結果: [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 0:  \"2021-07-28T22:00:30.124230122+09:00[Asia\u002FTokyo]\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1:  \"2021-07-29T22:00:30.124230122+09:00[Asia\u002FTokyo]\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 2:  \"2021-07-30T22:00:30.124230122+09:00[Asia\u002FTokyo]\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 3:  \"2021-07-31T22:00:30.124230122+09:00[Asia\u002FTokyo]\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 4:  \"2021-08-01T22:00:30.124230122+09:00[Asia\u002FTokyo]\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 5:  \"2021-08-02T22:00:30.124230122+09:00[Asia\u002FTokyo]\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 6:  \"2021-08-03T22:00:30.124230122+09:00[Asia\u002FTokyo]\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 7:  \"2021-08-04T22:00:30.124230122+09:00[Asia\u002FTokyo]\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(baseDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F \"2021-07-28T22:00:30.124230122+09:00[Asia\u002FTokyo]\" &#x3C;- 起点日時は変わっていない\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Chr \u002F>\n\u003Cp>　ミュータブルなDateオブジェクトを使っていて一番やっかいなのが、起点日時を格納したbaseDate定数は「いじらない！」というコーダー側の強い覚悟を常に持っていないと、どこかで日時が書き換わってしまっている不安にさいなまれることになることだ……w\u003Cbr \u002F>\n　それに比べて他のライブラリはインスタンス化した日時はイミュータブルであることが担保されているので、心穏やかに日付を取り扱うことができる。\u003C\u002Fp>\n\u003Ch3>2桁年の自動マッピング\u003C\u002Fh3>\n\u003Cp>　Dateオブジェクトの最もヒドイ仕様は、与えられた年の数値引数が2桁以下（0～99）だった場合に、1900～1999年に自動でマッピングしてしまうことだ。さらに、年のみの指定ではインスタンス化できない点も地味に使いづらい。例えば、下記のコードを参照してみて欲しい。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F コンストラクタ引数が1つだけの数値の場合、UNIX時間が与えられたとしてインスタンス化される\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(y).\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F -> 1970-01-01T00:00:00.000Z ~ 1970-01-01T00:00:00.100Z\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F ローカルタイムゾーンでのインスタンス化の場合、オフセットによるUTC日時がズレるのであえて月の2日目を指定している\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(y, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">).\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getFullYear\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F -> 1900 ~ 1999 最後は 100\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F UTCメソッドは年のみの指定でUNIX時間が得られるので、それを元にインスタンス化できる\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(Date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">UTC\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(y)).\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getUTCFullYear\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F -> 1900 ~ 1999 最後は 100\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　もし2桁以下の年を取得したい場合、このように書くことになる。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> twoDigitYearDate \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  twoDigitYearDate \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(twoDigitYearDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">setFullYear\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(y))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(twoDigitYearDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getFullYear\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F 0 ~ 99\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(twoDigitYearDate.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F 0000-07-22T01:10:10.057Z ~ 0099-07-22T01:10:10.057Z\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　一度テンポラリーなインスタンスを生成しておいて、Setterでプリミティブ値を上書きするという方法だ。美しくないうえに、無駄に処理コストが高くて、どうも好きになれない。理想的というか直感的に、2桁以下の年は、そのまま0～99年（BCE.1～CE.99）でインスタンス化されて欲しいんだよね。\u003C\u002Fp>\n\u003Cp>　ちゅーわけで、これに対応できているライブラリを調査してみた。\u003C\u002Fp>\n\u003Ch4>検証: Luxon\u003C\u002Fh4>\n\u003Cp>　Luxonでの結果は下記の通り。理想的なマッピングが行われている。完璧だ！\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> DateTime\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> luxon.DateTime\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> DateTime.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">local\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(y)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F 結果（システムタイムゾーンは Asia\u002FTokyo）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F 0000-01-01T00:00:00.000+09:18 ~ 0100-01-01T00:00:00.000+09:18\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>検証: DAYJS\u003C\u002Fh4>\n\u003Cp>　DAYJSでの結果は下記の通り。自動マッピングの処理に規則性がなく散々な結果だった。実際のところ、2桁年でのインスタンス化には非対応と云った方がよいだろう。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 配列引数での日時インスタンス化にはプラグインが必要\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">dayjs.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">extend\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(window.dayjs_plugin_arraySupport)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> date \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> dayjs\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">([y])\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">format\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F 結果（システムタイムゾーンは Asia\u002FTokyo）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F y = 0: 2000-01-01T00:00:00+09:00\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F y = 1 ~ 12: 2001-01-01T00:00:00+09:00 ~ 2001-12-01T00:00:00+09:00 （月だけ変わる）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F y = 13 ~ 31: Invalid Date (`year()`メソッドでは`NaN`となる)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F y = 32 ~ 49: 2032-01-01T00:00:00+09:00 ~ 2049-01-01T00:00:00+09:00\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F y = 50 ~ 99: 1950-01-01T00:00:00+09:00 ~ 1999-01-01T00:00:00+09:00\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F y = 100: 100-01-01T00:00:00+09:15\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>検証: Temporal\u003C\u002Fh4>\n\u003Cp>　Temporalでの結果は下記の通り。2桁年に対しての自動マッピングは行われないものの、年のみでのインスタンス化が出来ない。また、インスタンスメソッドの\u003Ccode>from()\u003C\u002Fcode>は親となるPlain系メソッドに依存した日付データとなってしまい、ISO-8601形式等他の形式の日付が取得はできないためちょっと使い勝手が悪い。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">; y\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F Temporalには年指定のみで日付をインスタンス化できるメソッドがないので、最低でも月指定が必要\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> Temporal.PlainYearMonth.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">from\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">({ year: y, month: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(date.year, date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F 結果\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  \u002F\u002F 0 ~ 100, \"+000000-01\" ~ \"+000100-01\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Chr \u002F>\n\u003Cp>　以上、この項目について私的な期待値を満たしてくれるライブラリはLuxonだけだった。\u003Cbr \u002F>\n　まぁ、UNIX元期（1970年1月1日0時0分0秒）より前の時刻を取り扱うようなケースは稀なのかもしれないが、私的にはここがかなり重要なポイントでもある。\u003C\u002Fp>\n\u003Ch3>「月」の指定レンジが 0～11\u003C\u002Fh3>\n\u003Cp>　Dateオブジェクトでは、1月は0、12月は11と云うように配列の数値添え字の感覚で月を指定しないといけない。これが直感的でなく、コードの可読性を著しく阻害している要因でもある。一応12進数として繰り上がりが行われるので、月に12と指定してもエラーにはならず、ただ繰り上がって翌年の1月になってしまいバグの温床にもなり易いのだ。\u003Cbr \u002F>\n　ちゅーわけで、直感的で、開発者に優しい1～12の数値で月が指定できるライブラリを調査してみた。\u003C\u002Fp>\n\u003Ch4>検証: Luxon\u003C\u002Fh4>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> DateTime.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">local\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2021\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">22\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(date.month, date.monthLong, date.monthShort)\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F 7 \"July\" \"Jul\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　さすがはLuxon！　渡した月の数値をそのまま月としてインスタンス化してくれる。\u003C\u002Fp>\n\u003Ch4>検証: DAYJS\u003C\u002Fh4>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> dayjs\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">([\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2021\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">22\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">])\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toISOString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(), date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">format\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(), date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">month\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(), date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">get\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'month'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 結果\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F date.toISOString(): \"2021-08-21T15:00:00.000Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F date.format():      \"2021-08-22T00:00:00+09:00\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F date.month():       7\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F date.get('month'):  7\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　DAYJSはちょっと微妙……というかむしろ危険だ。インスタンス化した日付を日付文字列やフォーマッターを介して出力すると、ネイティブJSと同じように+1の月となるが、個別に日付要素を取得するインスタンスメソッドで取得すると引数で渡した月が返る。これはどちらかに統一しないとバグの温床になり得ないか！？\u003Cbr \u002F>\n　特に、\u003Ccode>get('month')\u003C\u002Fcode>メソッドについては公式ドキュメントに0開始の月が返ると書いてあることもあって、ちょっと混乱してしまったw\u003C\u002Fp>\n\u003Ch4>検証: Temporal\u003C\u002Fh4>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> yearMonth\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> Temporal.PlainYearMonth.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">from\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">({ year: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2021\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, month: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> }),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      monthDay\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">  =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> Temporal.PlainMonthDay.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">from\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">({ month: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">7\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, day: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">22\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> }),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      date\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">      =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> monthDay.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toPlainDate\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">({ year: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2021\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( yearMonth.month, monthDay.monthCode, date.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">() )\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 結果\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F yearMonth.month:    7\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F monthDay.monthCode: \"M07\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F date.toString():    \"2021-07-22\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　Temporalも与えられた月の数値をそのまま月として日付をインスタンス化してくれる。ただ、Temporalはインスタンスを生成する際に使われたメソッドによって生成される日付のプリミティブ値が異なる。「年と月」から生成した場合と「月と日」から生成した場合とでは全く別の断片的な日付インスタンスが生成されるのだ。そして、生成したインスタンスの欠けている日時要素を補完することで断片データから完全な日時データを作成していくことができる。\u003Cbr \u002F>\n　従来のJavaScriptのDateオブジェクトと全く異なる概念性を持っているので、特性に馴れないと逆に使いづらいかもしれない。\u003C\u002Fp>\n\u003Ch3>タイムゾーンオフセットのゆらぎ\u003C\u002Fh3>\n\u003Cp>　あまり知られていないが、JavaScriptのタイムゾーンオフセットは固定値ではない。歴史的経緯や年代によって同じタイムゾーンでも時差が異なるのだ。以前気になって独自に調べてみたところ、下記の例のように結構な頻度でブレている。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth align=\"center\">年\u003C\u002Fth>\n\u003Cth align=\"center\">America\u002FNew_York (UTC-05:00)\u003C\u002Fth>\n\u003Cth align=\"center\">America\u002FDanmarkshavn (Coordinated Universal Time)\u003C\u002Fth>\n\u003Cth align=\"center\">Europe\u002FLondon (GMT Standard Time)\u003C\u002Fth>\n\u003Cth align=\"center\">UTC\u003C\u002Fth>\n\u003Cth align=\"center\">Africa\u002FMonrovia (Greenwich Standard Time)\u003C\u002Fth>\n\u003Cth align=\"center\">Asia\u002FKathmandu\u003C\u002Fth>\n\u003Cth align=\"center\">Asia\u002FTokyo (Japan Standard time)\u003C\u002Fth>\n\u003Cth align=\"center\">Pacific\u002FTongatapu (UTC+13:00)\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd align=\"center\">2021\u003C\u002Ftd>\n\u003Ctd align=\"center\">-05:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">+00:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">+00:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">+00:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">+00:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">+05:45\u003C\u002Ftd>\n\u003Ctd align=\"center\">+09:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">+13:00\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">2000 ~ 2002, 2017\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">+14:00\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">1917 ~ 1995\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">-03:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">1920 ~ 1985\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">+5:30\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">1920 ~ 1972\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">-00:44:30\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">1943 ~ 1945\u003C\u002Ftd>\n\u003Ctd align=\"center\">-04:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">-00:44:30\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">~ 1942\u003C\u002Ftd>\n\u003Ctd align=\"center\">-05:00\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">-00:44:30\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">~ 1919\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">-00:43:08\u003C\u002Ftd>\n\u003Ctd align=\"center\">+05:41:16\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">~ 1916\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">-01:14:40\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">1901 ~ 1940\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">+12:20\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">~ 1900\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">+12:19:20\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">~ 1888\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">+09:18:59\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">~ 1883\u003C\u002Ftd>\n\u003Ctd align=\"center\">-04:56:02\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">~ 1847\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">-00:01:15\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>　システム時制として一般的なUNIXエポック元期（1970\u002F1\u002F1）以降でも結構なブレが発生している。同一タイムゾーンにおいて時差が異なる二点間のUTC日時のインターバルを取得する場合、その差分はどのように取り扱われているのかが気になるところだろう。\u003Cbr \u002F>\n　以前、GMT（グリニッジ標準時）においてこのタイムゾーンのキャズム（溝、境界）間のDateオブジェクトのプリミティブ値がどうなっているか\u003Ca href=\"https:\u002F\u002Fqiita.com\u002Fka215\u002Fitems\u002F9da187a3611d4dc96b46#%E6%B6%88%E5%A4%B1%E6%99%82%E9%96%93%E3%81%AE%E3%83%9F%E3%82%B9%E3%83%86%E3%83%AA%E3%83%BC\">調べたことがある\u003C\u002Fa>が、その結果、キャズムポイントである1847年12月1日0:0:0～0:1:15において時間が消失していることが分かった。つまり、消失時間中の日時は取得できないのだが、消失することで前後の差分が吸収されて、結果として丸く収まる具合だ（これってあまりにもやっつけな仕様だと思うが……）。一方で、日本標準時の場合は時間消失は起きなかった（つまりは差分吸収がされないために丸く収まらないということだ）。\u003Cbr \u002F>\n　これらのタイムゾーンオフセットの揺らぎとキャズム間の挙動は一見するとバグに近しいのだが、あまり表立って問題にもならないので、深く突っ込むのは止めておこうかと思うw\u003Cbr \u002F>\n　差し当って、同一タイムゾーン間で時差が異なる二点間のUTC日時の期間をそれぞれのライブラリで取得してみた。調査ポイントとしては、差分吸収が行われていない日本標準時のキャズム日時を利用する。\u003C\u002Fp>\n\u003Ch4>検証:  Dateオブジェクト\u003C\u002Fh4>\n\u003Cp>　まず、ネイティブJSのDateオブジェクトでの挙動を確認しておく。日時比較はそれぞれの日時のミリ秒を取得して差分を取ることになる。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> date1\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">  =\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1888\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">18\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">58\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">999\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F Sun Jan 01 1888 00:18:58 GMT+0918 (JST)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      date2\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">  =\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> Date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1888\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">18\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">59\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F Sun Jan 01 1888 00:18:59 GMT+0900 (JST)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      diffMs\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> date2.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getTime\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">() \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">-\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> date1.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">getTime\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(diffMs)\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1139001\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　重要な点は\u003Cstrong>タイムゾーンオフセットのキャズム時刻が 1888-01-01T00:18:58.999 になる\u003C\u002Fstrong>ことと、論理的には二点間日時の時差が1ミリ秒のはずなのに、1,139,001ミリ秒（18分59秒1ミリ秒）の差が出てしまうことだ。これが、GMTと異なり時差吸収が行われないタイムゾーンオフセットのキャズム挙動である。\u003C\u002Fp>\n\u003Ch4>検証: Luxon\u003C\u002Fh4>\n\u003Cp>　Luxonでは二点間の日時の差分を取得できるインスタンスメソッド\u003Ccode>diff()\u003C\u002Fcode>が実装されているので、これを使う。\u003Cbr \u002F>\n　そして、重要なのは\u003Cstrong>タイムゾーンオフセットのキャズム時刻が 1888-01-01T00:00:00.000 になる\u003C\u002Fstrong>ことだ。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> end\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">    =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> DateTime.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">local\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1888\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1888-01-01T00:00:00.000+09:00 (UTC+09:00)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      start\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">  =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> DateTime.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">local\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1887\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">12\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">31\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">23\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">59\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">59\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">999\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1887-12-31T23:59:59.999+09:18 (UTC+09:18)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      diff\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">   =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> end.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">diff\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(start),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      diffMs\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> diff.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toObject\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">().milliseconds\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(diffMs)\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1080001\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　日時として日本標準時の 1887-12-31T23:59:59.999 と 1888-01-01T00:00:00.000 の差は1ミリ秒なのだが、この二点間日時の間にはタイムゾーンオフセットに1,080,001ミリ秒（18分1ミリ秒） の時差が発生しているため、差分計算を行うとその時差が吸収されずに算出される。\u003C\u002Fp>\n\u003Ch4>検証: DAYJS\u003C\u002Fh4>\n\u003Cp>　DAYJSで日時比較するにはインスタンスメソッド\u003Ccode>diff()\u003C\u002Fcode>が使える。このメソッドはプラグインなしでも利用可能だ。\u003Cbr \u002F>\n　そして、重要なのが\u003Cstrong>タイムゾーンオフセットのキャズム時刻が 1888-01-01T00:18:58.999 になる\u003C\u002Fstrong>ことだ。これはネイティブJSのDateオブジェクトと同じである。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">dayjs.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">extend\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(window.dayjs_plugin_arraySupport)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> date1\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">  =\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> dayjs\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">([\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1888\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">18\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">58\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">999\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">]),\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F Sun Jan 01 1888 00:18:58 GMT+0918 (JST) \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      date2\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">  =\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> dayjs\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">([\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1888\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">18\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">59\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">]),\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F Sun Jan 01 1888 00:18:59 GMT+0900 (JST)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      diffMs\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> date2.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">diff\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(date1)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(diffMs)\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F 1139001\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　日時として日本標準時の 1888-01-01T00:18:58.999 と 1888-01-01T00:18:59.000 の差は1ミリ秒だが、この二点間日時の間にはタイムゾーンオフセットに1,139,001ミリ秒（18分59秒1ミリ秒）の時差が発生している。時差の値についてもネイティブJSと同じなので、DAYJSのコア処理はかなりDateオブジェクトに依存していることがわかる。\u003C\u002Fp>\n\u003Ch4>検証: Temporal\u003C\u002Fh4>\n\u003Cp>　Temporalではインスタンスメソッドの\u003Ccode>until()\u003C\u002Fcode>を使うことで2点間日時の差分を取得できる。\u003Cbr \u002F>\n　重要な\u003Cstrong>タイムゾーンオフセットのキャズム時刻は 1888-01-01T00:18:58.999999999 である\u003C\u002Fstrong>。Temporalではナノ秒までの精度で日時をインスタンス化できるので高精度な値になっているが、キャズム時刻はネイティブJSやDAYJSと同じポイントになっている。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> date1\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> Temporal.ZonedDateTime.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">from\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        \u002F\u002F 1888-01-01T00:18:58.999999999+09:18:59\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        timeZone: \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'Asia\u002FTokyo'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        year: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1888\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, month: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, day: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        hour: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, minute: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">18\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, second: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">58\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        millisecond: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">999\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, microsecond: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">999\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, nanosecond: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">999\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> }),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      date2\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> Temporal.ZonedDateTime.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">from\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        \u002F\u002F 1888-01-01T00:18:59.000000000+09:00\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        timeZone: \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'Asia\u002FTokyo'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        year: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1888\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, month: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, day: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        hour: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, minute: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">18\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, second: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">59\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        millisecond: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, microsecond: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, nanosecond: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> }),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      diffTimes\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> date1.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">until\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(date2, {largestUnit: \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'minute'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, smallestUnit: \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'nanosecond'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">})\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(diffTimes.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">toLocaleString\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">())\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F PT18M59.000000001S\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　日時として日本標準時の 1888-01-01T00:18:58.999999999 と 1888-01-01T00:18:59.000000000 の差は1ナノ秒だが、この二点間日時の間にはタイムゾーンオフセットに18分59秒1ナノ秒の時差が発生している。精度の差こそあるが、この差分値はネイティブJSやDAYJSと同じである。\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Cp>　この問題、本来バグっぽい仕様なこともあって、どの仕様を正とするべきかが判断できないのだが、あえて総括するならば、多数決でDateオブジェクト準拠のDAYJSとTemporalの挙動が正しいのかもしれない。Luxonだけオフセットのキャズム時刻のタイミング自体がズレているのは、なかなか整合性を取りづらいのだ。とはいえ、Luxonのキャズム時刻はちょうど年が変わる時点になっていてわかりやすいので、個人的にはこっちの方が扱いやすくて好ましい。\u003C\u002Fp>\n\u003Cp>　ちゅーか、今回この調査していて、ローカルタイムゾーンやDST（夏時間）といったローカルルールに影響を受けるような時制システムを構築しては駄目だな…と痛感した。システム内で取り扱う日時は一貫してUTCで統一しておくのが最も無難で安心できる。一般的にUTCと同一と云われているGMTですら時差が発生するようでは、タイムゾーンで信じられるのは唯一UTCだけなのだ。もはや、ITシステムの時制にローカルタイムゾーンなんて要らないぐらいだw\u003C\u002Fp>\n\u003Ch3>UNIX時間の単位\u003C\u002Fh3>\n\u003Cp>　これについてはそこまで不満はないのだが、まぁ可用性があると嬉しいな的な感じだ。サーバーサイドや外部との連携時にUNIX時間（UNIXタイムスタンプ）の単位を揃えられると便利じゃないかなぁ……と思った次第。\u003Cbr \u002F>\n　まず、主要な各高級言語で取り扱われる日時データのUNIX時間として、取得できる値の単位を一覧化してみると、下記のようになった。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth align=\"center\">言語\u003C\u002Fth>\n\u003Cth align=\"center\">メソッドなど\u003C\u002Fth>\n\u003Cth align=\"center\">取得できるUNIXエポックの単位（最小）\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd align=\"center\">PHP\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>time()\u003C\u002Fcode> , \u003Ccode>date_format('U')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">秒\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">PHP\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>microtime()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">マイクロ秒\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">Ruby\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>Time.now.usec\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">マイクロ秒\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">Ruby\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>Time.now.strftime('%N')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">ナノ秒\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">Python\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>time.time()\u003C\u002Fcode>, \u003Ccode>datetime.timestamp()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">秒\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">Python\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>datetime.strftime('%f')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">マイクロ秒\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">Java\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>System.currentTimeMillis()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">ミリ秒\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">Java\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Ccode>System.nanoTime()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"center\">ナノ秒\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>　うーん……思ってた以上にバラバラだねぇ……。\u003Cbr \u002F>\n　現状のJavaScriptのDateオブジェクトでもミリ秒まで取り扱っているし、特に問題は出なさそうだ。\u003Cbr \u002F>\n　結局、JavaScript側ができる最良の互換性としては、サーバーサイド側で取り扱われ得る最小単位のナノ秒まで対応しておくことぐらいなのかもしれない。そう考えると、ナノ秒まで取り扱われるTemporalはその辺の互換性まで考慮して策定しているってことになる。\u003C\u002Fp>\n\u003Ch2>まとめ\u003C\u002Fh2>\n\u003Cp>　現状、JavaScriptにおける日時処理をスマートに開発したいのであれば、\u003Cstrong>「Luxon」を選択するのが最適解\u003C\u002Fstrong>のような気がする。他にも、今回比較対象に含めなかった\u003Ca href=\"https:\u002F\u002Fdate-fns.org\u002F\">date-fns\u003C\u002Fa>などもJS界隈では人気があるので、あくまでLuxon推しは今回の比較対象の内でということになるんだが……。\u003Cbr \u002F>\n　確実に云えることは、Temporalだけはまだ採用しない方がいいということだ。ただし、将来的にネイティブJSにTemporalがビルトインされた場合、他のライブラリは不要になって淘汰されてしまう可能性はある。今回Temporalを実際に触ってみて、その性能とパフォーマンスに改めて期待が膨らんだのも確かなのだ。\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Cp>　蛇足だが、今回この調査をすることにした切っ掛けは、私が今開発している\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fka215\u002Fjquery.timeline\">jQuery.Timeline\u003C\u002Fa>プラグインのネイティブJavaScriptバージョンのコアライブラリとして、どの日付処理ライブラリを採用しようか迷ったからである。\u003Cbr \u002F>\n　で、結局何を選んだのかというと、どれも自分的にイマイチなところがあって、採用は見送った次第……（おぃw）\u003C\u002Fp>\n\u003Cp>　色々検討した末、今回の調査で得られた各ライブラリのイイところを吸収し、さらに個人的なDateオブジェクトの不満点も解消できる、新たな日時処理ライブラリを開発することにしたのだ（こうやって本筋であるTimelineプラグインの開発は遅れていく……w）。\u003Cbr \u002F>\n　ちなみに、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fka215\u002Fsunorhc\">開発中のライブラリはこちら\u003C\u002Fa>である。\u003C\u002Fp>\n\u003Cp>　まぁ何はともあれ、今回の調査でネイティブJavaScript用のライブラリのソースコードを色々読んだのが、最大の収穫だった。ソースコード的には、DAYJSのコードが自分好みで非常に読みやすく、インスピレーションが刺激された。\u003C\u002Fp>\n",[271,274,276,279,282],{"slug":272,"name":273},"date","Date",{"slug":275,"name":275},"dayjs",{"slug":277,"name":278},"javascript","JavaScript",{"slug":280,"name":281},"luxon","Luxon",{"slug":283,"name":284},"temporal","Temporal",[286,293,296,304],{"slug":287,"title":288,"date":289,"excerpt":290,"image":42,"categories":291},"handling-of-javascript-date-object-is-different-for-each-browser","JavaScriptのDateオブジェクトの取り扱いはブラウザ毎に異なる","2015-09-08T12:40:00","データベースのdatetime型カラムの日時をJavaScriptでフォーマットして出力しようとしたら、Chromeでは正常に表示されるのにFirefoxでは表示されないという状態に陥った。 調べたところ、なんと、Jav…",[292],{"slug":25,"name":26},{"slug":185,"title":186,"date":187,"excerpt":188,"image":189,"categories":294},[295],{"slug":25,"name":26},{"slug":297,"title":298,"date":299,"excerpt":300,"image":301,"categories":302},"technique-to-change-column-width-of-markdown-table","Technique to change column width of markdown table","2019-03-08T17:58:18","The table creation by using the markdown text is easily and very convenient. However it’s difficult that…","\u002Fassets\u002Fuploads\u002F2019\u002F03\u002Fteq_markdown_table.jpg",[303],{"slug":25,"name":26},{"slug":38,"title":39,"date":40,"excerpt":41,"image":42,"categories":305},[306,307],{"slug":45,"name":46},{"slug":25,"name":26},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":309},[310],{"slug":25,"name":26},{"slug":185,"title":186,"date":187,"excerpt":188,"image":189,"categories":312},[313],{"slug":25,"name":26},1793391394161]