date-fnsでUTCの文字列をJSTのDateに変換する(yyyy-MM-dd HH:mm)

JavaScript
スポンサーリンク

日時がUTCになっている文字列をJavaScriptのDateオブジェクトに変換してみます。

ライブラリにはdate-fnsを使用しました。

parseでDateオブジェクトに変換するだけでは、TimezoneOffset分ずれてしまいます。

注意が必要です。

date-fnsのインストール方法

npm i date-fns
yarn add date-fns

UTCの文字列からDateオブジェクトに変換

import { parse, subMinutes } from 'date-fns';

const convertUtcStr2JstDate = (str, format) => {
  const utcDate = parse(str, format, new Date());
  return subMinutes(utcDate, utcDate.getTimezoneOffset());
};

const utcStr = '2022-02-08 00:00';
const format = 'yyyy-MM-dd HH:mm';

const jstDate = convertUtcStr2JstDate(utcStr, format);

console.log(jstDate.toString()); //Tue Feb 08 2022 09:00:00 GMT+0900 (日本標準時)

ただ単にparseをしただけでは、日付の文字列が現地時間として処理されます。

その場合、TimezoneOffsetの分だけ値がずれてしまいます。

そこで、subMinutesでオフセット分を引いてあげています。

const utcStr = '2022-02-08 00:00';
const format = 'yyyy-MM-dd HH:mm';

//GMT+0900が追加されてしまう
const utcDate = parse(str, format, new Date());
console.log(utcDate);
//Tue Feb 08 2022 00:00:00 GMT+0900 (日本標準時)

//9時間の差を引いて調整する(JSTのTimezoneOffsetはマイナス)
const jstDate = subMinutes(utcDate, utcDate.getTimezoneOffset()) 
console.log(jstDate);
//Tue Feb 08 2022 09:00:00 GMT+0900 (日本標準時)

実際には、JSTのTimezoneOffsetはマイナスになるので、UTCに9時間足すことになります。

使った関数ちょっと説明

parse(dateString, formatString, referenceDate, [options])

文字列をフォーマットに従ってDateオブジェクトにします。

使い方はこんな感じ

// 02/11/2014をフォーマットMM/dd/yyyyで解析
const result = parse('02/11/2014', 'MM/dd/yyyy', new Date())
//=> Tue Feb 11 2014 00:00:00
subMinutes(date, amount)

Dateオブジェクトから指定した分数引いて、その結果をDateオブジェクトで返します。

// 2014/06/10 12:00:00から30分引く
const result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)
//=> Thu Jul 10 2014 11:30:00

その他の関数

他にもいろんなパターンの日付を取得したりもできます。

以上

このブログでは、【ConoHa WING】を使っています

このブログでは、【ConoHa WING】を使っています
わたし、稼げました。

このブログでは、プログラミングでの学びをノート代わりとして記事としています。
少しずつPVが増えてきて、先日Google AdSenseの収益が振り込まれました!

どれくらいの記事数、期間、PVがあれば振込ボーターの8千円に到達するのか?
私のリアルな数字を紹介します。

ブログ村を利用しています
素人エンジニアの苦悩 - にほんブログ村
PVアクセスランキング にほんブログ村
JavaScript
スポンサーリンク
スポンサーリンク
シェアする
amateur_engineerをフォローする
素人エンジニアの苦悩

コメント

タイトルとURLをコピーしました