JavaScriptでISO日付を日付形式yyyy-mm-ddに変換します


108

ISO 8601の日付からyyyy-mm-dd形式の日付を取得するにはどうすればよいですか?

私の8601日付は

2013-03-10T02:00:00Z

どうすれば以下を入手できますか?

2013-03-10

2
実際にやってみましたか?これは複数回回答された新しい質問ではありません。
bPratik 2014


14
date.split("T")[0]するだろう
Aravindh Gopi 2017

回答:


100

これを試して

date = new Date('2013-03-10T02:00:00Z');
date.getFullYear()+'-' + (date.getMonth()+1) + '-'+date.getDate();//prints expected format.

更新:-

コメントで指摘したように、必要に応じて日付と月の先行ゼロを出力するように回答を更新しています。

date = new Date('2013-08-03T02:00:00Z');
year = date.getFullYear();
month = date.getMonth()+1;
dt = date.getDate();

if (dt < 10) {
  dt = '0' + dt;
}
if (month < 10) {
  month = '0' + month;
}

console.log(year+'-' + month + '-'+dt);


17
注、これが日または月の先行ゼロを出力するとは思わない
user3413723

2
@ user3413723に同意します。先頭の0が削除されるため、YYYY-MM-DD形式の要件を満たさないため、これは質問に回答しません
James Murphy

正常に動作している@Mritunjay
Ravi Delixan 2015

これは、DriveByPosterによる回答に比べて長く、タイプミスが多くなります。しかし、言語にとらわれないので、私は反対票を投じません。それは私たちの処分で単純なツールを使用しないだけです。
RoboticRenaissance

2013 3 1この形式の日付を新しい日付(日付)で渡す方法を教えていただけますか
Kapil soni

142

文字列をトリミングするだけです:

var date = new Date("2013-03-10T02:00:00Z");
date.toISOString().substring(0, 10);

または、文字列のうち日付のみが必要な場合。

var strDate = "2013-03-10T02:00:00Z";
strDate.substring(0, 10);

3
私はこれが彼らからの最も簡単で最もエレガントな解決策だと思いますが、ここでこれの落とし穴はありますか?
Aida_Aida

30
@Aida_Aida考えられる唯一の問題は、コードが少なくとも8000年後の地質スケールの時間を扱う場合、フォーマットが10000年になるため、コードが壊れる可能性があるということYYYYY-MM-DDです。これを回避するには、T代わりにキャラクター。(en.wikipedia.org/wiki/Year_10,000_problemを参照)
アプシラー

9
ISOStringはUTCですが、Dateオブジェクトはローカルであるため、この方法ではタイムゾーンを正しく処理できません。これを考慮に入れる必要があります。
ギヨームF.

3
@GuillaumeF。重要な考慮事項ですが、それはOPの要件に準拠しています
jamesjansson

文字列を日付に解析する理由を理解できません。サブストリングオプションは、最も単純な答えのようです。
RobG


14

Moment.jsが日付のフォーマットを処理します。これは、JavaScriptタグを介してそれを含める方法と、Moment.jsを使用して日付をフォーマットする方法の例です。

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

moment("2013-03-10T02:00:00Z").format("YYYY-MM-DD") // "2013-03-10"

このコードスニペットは問題を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。また、コードと説明の両方の読みやすさが低下するため、コードを説明コメントで混雑させないようにしてください。
さようならStackExchange 2016

2
momentフォーマットのためだけに使用するかなり大きなライブラリです。むしろ、サイズがはるかに小さく、同じ機能を提供するdate-fnsを使用します
Hozefa 2017

@Hozefa、次にOPの質問にソリューションで答えます。
Harris

1
@ハリス-仕事は順調でした!
HadidAli

.toISODateString()それは非常に頻繁なケースであるため、瞬間にのようないくつかの機能があったらいいのに...
Lev Lukomsky

12

これは私が日付のみを取得するために行うことです:

let isoDate = "2013-03-10T02:00:00Z";

alert(isoDate.split("T")[0]);


2
これは、私が知る限り、実際にsplit()のアイデアを回答回答として提案する最初の回答です。私は、可能な限りあらゆる場所でmoment()を使用していますが、努力と信頼性と効果的な要因のソリューションを気に入っています。
Rainabba

1
toISOStringはUTCを使用します。これは、午前0時からのローカルタイムゾーンオフセットの期間に対して誤ったローカル日付を生成します。– RobG
マイケル

9

Moment.jsは、単一のユースケースで使用するかなり大きなライブラリです。date-fns代わりに使用することをお勧めします。基本的に、Moment.jsのほとんどの機能が提供され、バンドルサイズははるかに小さく、多くのものが提供されますformatting options

import format from 'date-fns/format'
format('2013-03-10T02:00:00Z', 'YYYY-MM-DD'); // 2013-03-10, YYYY-MM-dd for 2.x

注意すべき点の1つは、これはISO 8601時刻形式であるため、ブラウザは通常、UTC時刻からローカルタイムゾーンに変換することです。これはおそらくあなたができる簡単なユースケースですが'2013-03-10T02:00:00Z'.substring(0, 10);

より複雑な変換のdate-fnsための方法です。




4

これにより、日付がYYYY-MM-DD形式で出力されます。

let date = new Date();
date = date.toISOString().slice(0,10);

なぜこれがより多くの票を獲得しないのか私には分かりません、それは完璧に機能し、最小限の労力で質問に答えました
Wolfiebae

4

日付オブジェクトに日付を渡します。

var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');

1
toLocaleDateString()は "/"形式で提供します。「-」形式ではありません。
TechCrunch 2015年

上記は、「/」を「-」に置き換えて使用できます。toLocaleDateStringが変更された場合、最もエレガントではありません
James Murphy

toLocaleDateStringの結果はすべてのユーザーで一貫しているわけではないため、OPで必要な結果が得られない可能性があります。
RobG、

4

日付を取得するためにスプリット、スライス、およびその他の文字列ベースの試行を使用しているすべての人にとって、タイムゾーン関連の失敗に備えることができます。

ISO-StringにはZulu-Timezoneとこのタイムゾーンに基づく日付があります。つまり、実際のタイムゾーンの前または後の日付を使用する可能性があるため、変換チェーンで考慮する必要があります。

この例を見てください:

const timeZoneRelatedDate = new Date(2020, 0, 14, 0, 0);

console.log(timeZoneRelatedDate.toLocaleDateString(
    'ja-JP', 
    {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit'
    }
).replace(/\//gi,'-'));

// RESULT: "2020-01-14"

console.log(timeZoneRelatedDate.toISOString());

// RESULT: "2020-01-13T23:00:00.000Z" (for me in UTC+1)

console.log(timeZoneRelatedDate.toISOString().slice(0,10));

// RESULT: "2020-01-13"

3

日付オブジェクトがある場合:

let date = new Date()
let result = date.toISOString().split`T`[0]

console.log(result)

または

let date = new Date()
let result = date.toISOString().slice(0, 10)

console.log(result)


1
toISOStringはUTCを使用します。これは、午前0時からのローカルタイムゾーンオフセットの期間に対して誤ったローカル日付を生成します。
RobG

1

rk rkのソリューションを拡張するには:形式に時刻を含める場合は、toTimeString()を文字列に追加し、次のようにGMT部分を取り除きます。

var d = new Date('2013-03-10T02:00:00Z');
var fd = d.toLocaleDateString() + ' ' + d.toTimeString().substring(0, d.toTimeString().indexOf("GMT"));

0

私はこれを使いました:

HTMLDatetoIsoDate(htmlDate){
  let year = Number(htmlDate.toString().substring(0, 4))
  let month = Number(htmlDate.toString().substring(5, 7))
  let day = Number(htmlDate.toString().substring(8, 10))
  return new Date(year, month - 1, day)
}

isoDateToHtmlDate(isoDate){
  let date = new Date(isoDate);
  let dtString = ''
  let monthString = ''
  if (date.getDate() < 10) {
    dtString = '0' + date.getDate();
  } else {
    dtString = String(date.getDate())
  }
  if (date.getMonth()+1 < 10) {
    monthString = '0' + Number(date.getMonth()+1);
  } else {
    monthString = String(date.getMonth()+1);
  }
  return date.getFullYear()+'-' + monthString + '-'+dtString
}

出典:http : //gooplus.fr/en/2017/07/13/angular2-typescript-isodate-to-html-date/



0
let dt = new Date('2013-03-10T02:00:00Z');
let dd = dt.getDate();
let mm = dt.getMonth() + 1;
let yyyy = dt.getFullYear();

if (dd<10) {
    dd = '0' + dd;
}
if (mm<10) {
    mm = '0' + mm;
}
return yyyy + '-' + mm + '-' + dd;

0

@Hozefaによる回答のより良いバージョン。

あなたがいる場合はdate-fnsインストールされ、使用できformatISOの機能を

const date = new Date(2019, 0, 2)
import { formatISO } from 'date-fns'
formatISO(date, { representation: 'date' }) // '2019-01-02' string

-4

以下のコードを使用してください。それはあなたにとって便利です。

let currentDate = new Date()
currentDate.toISOString()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.