ISO 8601の日付からyyyy-mm-dd形式の日付を取得するにはどうすればよいですか?
私の8601日付は
2013-03-10T02:00:00Z
どうすれば以下を入手できますか?
2013-03-10
date.split("T")[0]
するだろう
ISO 8601の日付からyyyy-mm-dd形式の日付を取得するにはどうすればよいですか?
私の8601日付は
2013-03-10T02:00:00Z
どうすれば以下を入手できますか?
2013-03-10
date.split("T")[0]
するだろう
回答:
これを試して
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);
文字列をトリミングするだけです:
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);
YYYYY-MM-DD
です。これを回避するには、T
代わりにキャラクター。(en.wikipedia.org/wiki/Year_10,000_problemを参照)
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"
.toISODateString()
それは非常に頻繁なケースであるため、瞬間にのようないくつかの機能があったらいいのに...
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
ための方法です。
let isoDate = "2013-03-10T02:00:00Z";
var d = new Date(isoDate);
d.toLocaleDateString('en-GB'); // dd/mm/yyyy
d.toLocaleDateString('en-US'); // mm/dd/yyyy
日付オブジェクトに日付を渡します。
var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');
日付を取得するためにスプリット、スライス、およびその他の文字列ベースの試行を使用しているすべての人にとって、タイムゾーン関連の失敗に備えることができます。
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"
日付オブジェクトがある場合:
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)
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"));
私はこれを使いました:
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/
@Hozefaによる回答のより良いバージョン。
あなたがいる場合はdate-fns
インストールされ、使用できformatISOの機能を
const date = new Date(2019, 0, 2)
import { formatISO } from 'date-fns'
formatISO(date, { representation: 'date' }) // '2019-01-02' string