Ответ 1
Непонятно, что вы спрашиваете. Если вы хотите, чтобы дата UTC с часами всегда 0, установите часы UTC на 0 и используйте toISOString, например.
var d = new Date();
d.setUTCHours(0,0,0,0);
console.log(d.toISOString());
Моя конфигурация - это часовой пояс в Лиссабоне. Когда я делаю new Date()
, я получаю текущую локальную дату/время, которая Fri Apr 28 2017 01:10:55 GMT+0100 (GMT Daylight Time)
Когда я получу строку ISO с toISOString()
, она применит часовой пояс, и я получу:
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
Есть ли способ javascript, например, toISOString() или использовать, возможно, момент, чтобы получить этот формат?
Независимо от того, какой часовой пояс или момент дня, я просто хочу, чтобы это было полночь указанной даты.
Непонятно, что вы спрашиваете. Если вы хотите, чтобы дата UTC с часами всегда 0, установите часы UTC на 0 и используйте toISOString, например.
var d = new Date();
d.setUTCHours(0,0,0,0);
console.log(d.toISOString());
Вы можете добиться этого, просто форматируя все, что вам нужно, используя moment.format()
, а затем просто добавляя дополнительный Z к строке. Вы должны сделать это как Z в тот момент, когда JS зарезервирован для вывода.
var date = moment('2014-08-28').format("YYYY-MM-DDT00:00:00.000") + "Z";
Пример скрипки https://jsfiddle.net/2avxxz6q/
Предположим, вы хотите получить текущую дату в ISO 8601, чтобы передать ее в свой API? Возможно, использование обертки moment.js для нативного JavaScript, упомянутого здесь может помочь?
Как в вашем примере:
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>
Вам не нужна библиотека 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()
}
}
}
Вы можете использовать https://momentjs.com/docs/#/displaying/as-iso-string/
moment().toISOString(keepOffset);
Вы можете использовать метод startOf для достижения этого
moment().startOf("day").toISOString()
Я считаю, вы говорите, что хотите получить текущую дату в Лиссабоне:
moment().tz("Europe/Lisbon").format('YYYY-MM-DD')
Вы можете видеть, что это работает так, как вам кажется:
moment('2017-04-28T00:00:00+01:00').tz("Europe/Lisbon").format('YYYY-MM-DD') //"2017-04-28"