JavaScriptで日付や時刻を取得して曜日を数値から文字列へと変換する方法 結城永人 - 2018年9月6日 (木) Dateクラスのコンストラクタ関数を使うとDateインスタンスを素早く生成できる。 四つの構文と使用可能なオブジェクト An Owl on a tree branch by Lepale / Pixabay DateオブジェクトはUTC/協定世界時の1970年1月1日0時0分0秒(UNIXエポック)から始まるミリ秒までの時刻値を基準として持っている。 new Date()無名コンストラクタ:現在のシステム内の日付と時刻 new Date(value)value:UNIX時刻(UNIXエポックからの経過秒)new Date("dateString")dateString:IETF準拠のRFC2822の日時指定とISO8601の拡張形式ブラウザや書式によって誤差が生じ得るnew Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)タイムゾーンで扱われる必須項目year:年数_主に四桁の整数/一桁と二桁は1900から1999までのマッピングmonthIndex:月数_0から11までの整数が一月から十二月までに相当する値それぞれの数字がずれている任意項目day:日数_1から31までの整数hours:時数_0から23までの整数minutes:分数_0から59までの整数seconds:秒数_0から59までの整数milliseconds:ミリ秒数0から999までの整数 日付と時刻の数値データを取得するメソッド getメソッドの基本的な七種類だけ取り上げている。 getFullyear():四桁の年数getMonth():月数一月の0で始まって十二月の11で終わるgetDate():日数getDay():曜日番日曜日の0で始まって土曜日の6で終わるgetHours():時数getMinutes():分数getSeconds():秒数 フォーマットのカスタマイズのソースコード Dateの無名コンストラクタを使ったサンプル var dt = new Date(); var year = dt.getFullYear(); var month = dt.getMonth() + 1; var date = dt.getDate(); var day = dt.getDay(); var hour = dt.getHours(); var minute = dt.getMinutes(); var second = dt.getSeconds(); var dow = new Array("日", "月", "火", "水", "木", "金", "土"); 月数のgetMonth()は値が一つ少ないから「+1」を付ける。そして曜日は順番の数値ではわかり難いので、文字列に変換すると良いと思う。Arrayクラスのコンストラクタ関数の「new Array」で、曜日の配列の変数を作成しておくと後から対応する曜日の値で取り出せるようになる。 フォーマットの書き出し document.write(year + "年" + month + "月" + date + "日" + " (" + dow[day] + "曜日) " + hour + "時" + minute + "分" + second + "秒"); サンプルの実行結果 Dateオブジェクトを指定しないとシステム内の現在の日付と時刻と曜日が表示される。 dateStringの日付と時刻の誤差について Dateクラスのコンストラクタ関数に文字列のdateStringを使った場合はブラウザ毎に日付と時刻に誤差が生じるかも知れない。 parseメソッドで認識可能な形式のRFC2822やISO8601ならば大丈夫だけれどもJavaScriptで日付の文字列の解釈が一律化されてないためなんだ。 ブラウザごとに動作が異なり一貫性がないため、Data コンストラクタ (または同等の Data.perse) で、日付文字列を解釈しないように強くすすめます。RFC 2822 形式の文字列のサポートは、慣例に過ぎません。ISO 8601 フォーマットのサポートは、日付のみの文字列 (例: "1970-01-01") が地方時ではなくUTCとして扱われる点で異なります。 Date|MDN|Mozilla ただしECMAscript(JavaScript標準)5でISO8601の拡張形式の日付と時刻――四桁の年数と二桁の月数と日数を半角ハイフンで区切ってTを置いて二桁の時数と分数と秒数を半角コロンで区切って記載する/例_2018-01-01T01:01:01Z(Zは協定世界時を表す)や2018-01-01T01:01:01+09:00(+はタイムゾーンの追加分を表す)など――はサポートされていてdateStringに使っても誤差は生じないらしい。 日付の文字列は、ISO 8601 の書式になるでしょう。例えば、"2011-10-10" (日付のみ) または "2011-10-10T14:48:00" (日付と時刻) の解釈が可能です。文字列が ISO 8601 の日付のみの場合、UTC タイムゾーンを使用して引用を判断します。文字列が簡略化された ISO 8601 書式の場合、地方時として扱われます。 Date.parse()|MDN|Mozilla 現行のブラウザの大半はECMAscript5のJavaScriptを読み込むからISO8601の拡張形式を使うかぎりはdateStringでの日時の誤差は生じないといって良いだろう。 すると注意するべきは入力するのが日付のみだとUTCで、日付と時刻だとタイムゾーンを含めて別々に扱われるところだ。 日本の場合、東京だとタイムゾーンで、九時間が追加されるから午後三時以降はUTCよりも日数が増えてしまう。月末ならば月数、年末ならば年数もそれぞれに一つずつ進んでしまうわけで、どちらを使うかを混同しないようにしたい。 コメント 新しい投稿 前の投稿
コメント