注:この回答は、2022-03の時点でまだ賛成を得ています。moment.jsライブラリは非推奨になりました。これらは2つの主要な選択肢です:LuxonとDay.js、その他は非推奨のリンクで言及されています。
Luxon
LuxonはMomentの進化と考えることができます。これは
、Momentの長年の寄稿者であるIsaacCambronによって作成されました。Luxonが存在する理由をお読みください。LuxonドキュメントのForMomentユーザーページ。
ロケール:Intl提供タイムゾーン:Intl提供
Day.js
Day.jsは、同様のAPIを使用して、Moment.jsの最小限の代替となるように設計されています。これはドロップインの代替ではありませんが、MomentのAPIの使用に慣れていて、すばやく移動したい場合は、Day.jsの使用を検討してください。
ロケール:個別にインポートできるカスタムデータファイルタイムゾーン:プラグインを介して提供されるIntl
サイズの違いからDay.jsを使用していますが、Luxonの方が扱いやすいです。
Web上のほとんどすべてのto-ISOメソッドは、文字列を出力する前に「Z」ulu時間(UTC)に変換を適用することにより、タイムゾーン情報を削除します。ブラウザのネイティブ.toISOString()も、タイムゾーン情報を削除します。
サーバーまたは受信者は、送信者のタイムゾーン情報を取得しながら、常に完全なISO日付をZulu時間または必要なタイムゾーンに変換できるため、これにより貴重な情報が破棄されます。
私が遭遇した最善の解決策は、Moment.js javascriptライブラリを使用し、次のコードを使用することです。
タイムゾーン情報とミリ秒で現在のISO時間を取得するには
now = moment().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T20:11:11.234+0100"
now = moment().utc().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T19:11:11.234+0000"
now = moment().utc().format("YYYY-MM-DDTHH:mm:ss") + "Z"
// "2013-03-08T19:11:11Z" <- better use the native .toISOString()
タイムゾーン情報は含まれているがミリ秒は含まれていないネイティブJavaScriptDateオブジェクトのISO時間を取得するには
var current_time = Date.now();
moment(current_time).format("YYYY-MM-DDTHH:mm:ssZZ")
これをDate.jsと組み合わせて、Date.today()のような関数を取得し、その結果を瞬間に渡すことができます。
このようにフォーマットされた日付文字列はJSONに準拠しており、データベースに保存するのに適しています。PythonとC#はそれを気に入っているようです。