私の設定はリスボンのタイムゾーンです。 new Date()
を実行すると、現在のローカルの日付/時刻であるFri Apr 28 2017 01:10:55 GMT+0100 (GMT Daylight Time)
を取得します
toISOString()
でISO文字列を取得すると、タイムゾーンが適用され、次のようになります。
_2017-04-28T00:10:55.964Z
_
問題は、数分前の日付時刻が(昨日)のようだったことです。
_2017-04-27T23:45:05.654Z
_
私はmoment.js(これは初めて)を試しましたが、このようなことをしました
_document.write(moment('2017-04-28').format())
_
しかし、これは_2017-04-28T00:00:00+01:00
_ではない_2017-04-28T00:00:00.000Z
_を取得します
この値をRestfulメソッドのパラメーターとして渡し、DateTime型として自動的に解析したいのですが、moment.js形式から出力を渡すと、_2017-04-27 23:00:00.00
_として解析されます
new Date()
またはnew Date('2017-04-27')
(日付部分)を使用して新しい日付を作成する場合、タイムゾーンのない時間なしで次のようなISO形式を取得したいだけです。
_2017-04-28T00:00:00.000Z
_
ToISOString()のようなjavascriptメソッドがありますか、それともその瞬間を使ってそのフォーマットを取得しますか?
タイムゾーンや時刻に関係なく、与えられた日付の真夜中をシミュレートするだけです。
あなたが何を求めているのかは非常に不明確です。時間を常に0とするUTC日付が必要な場合は、UTC時間を0に設定し、toISOStringを使用します。
var d = new Date();
d.setUTCHours(0,0,0,0);
console.log(d.toISOString());
もちろん、これはUTC日付を表示します。これは、日付を生成したシステムの日付と異なる場合があります。
また、
new Date('2017-04-27').toISOString();
should return 2017-04-27T00:00:00Z(つまり、ローカルとして扱うISO 8601に反するECMA-262に従ってUTCとして解析する必要があります)使用中のすべての実装で信頼性があります。
ISO 8601形式で現在の日付を取得するだけの場合は、次のことができます。
if (!Date.prototype.toISODate) {
Date.prototype.toISODate = function() {
return this.getFullYear() + '-' +
('0'+ (this.getMonth()+1)).slice(-2) + '-' +
('0'+ this.getDate()).slice(-2);
}
}
console.log(new Date().toISODate());
ただし、組み込みのtoISOStringはUTCを使用するため、混乱する可能性があります。 UTC日付が必要な場合:
if (!Date.prototype.toUTCDate) {
Date.prototype.toUTCDate = function() {
return this.getUTCFullYear() + '-' +
('0'+ (this.getUTCMonth()+1)).slice(-2) + '-' +
('0'+ this.getUTCDate()).slice(-2);
}
}
console.log(new Date().toUTCDate());
moment.format()
を使用して必要なものをすべてフォーマットし、追加のZを文字列に追加するだけで、これを実現できます。 JSが出力用に予約されている瞬間に、Zとしてこれを行う必要があります。
var date = moment('2014-08-28').format("YYYY-MM-DDT00:00:00.000") + "Z";
https://momentjs.com/docs/#/displaying/as-iso-string /を使用できます
moment().toISOString(keepOffset);
moment.js
ライブラリは不要です。日付コンポーネントを解析して接続するだけです。例えば
type Components = {
day: number,
month: number,
year: number
}
export default class DateFormatter {
// 2018-11-11T00:00:00
static ISOStringWithoutTimeZone = (date: Date): string => {
const components = DateFormatter.format(DateFormatter.components(date))
return `${components.year}-${components.month}-${components.day}T00:00:00`
}
static format = (components: Components) => {
return {
day: `${components.day}`.padStart(2, '0'),
month: `${components.month}`.padStart(2, '0'),
year: components.year
}
}
static components = (date: Date): Components => {
return {
day: date.getDate(),
month: date.getMonth() + 1,
year: date.getFullYear()
}
}
}
ISO 8601で現在の日付を取得してAPIに渡すことを希望すると思いますか?上記のネイティブJavaScriptにmoment.jsラッパーを使用することもできます here
あなたの例のように:
document.write(moment('01/12/2016', 'DD/MM/YYYY', true).toISOString());
スニペット:
$(function(){
var displaysTime = $('#divTime');
displaysTime.text(moment.utc('27/04/2017', 'DD/MM/YYYY', true).toISOString());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="divTime">
</div>