Как использовать период времени в дате и времени - PullRequest
0 голосов
/ 30 мая 2020

У меня есть форма, которая отправляет значение года и месяцев из ввода, а затем при отправке значения на сервер я конвертирую эти значения в строку ISO следующим образом:

const toIsoString = (year, month, day) => moment(new Date(year, month - 1, day)).toISOString(true).split('.')[0];

А затем в значения, которые я использую вот так.

StartDate: toIsoString(data.StartYear, parseInt(data.StartMonth, 10), 1),

В этом случае он отправляет значение следующим образом:

startDate: "2021-01-01T00:00:00"

Кто-нибудь знает, почему период времени игнорируется и как Могу ли я также отправить период времени со значениями года, месяца и даты. Любая помощь будет принята с благодарностью. Спасибо ...

Ответы [ 2 ]

2 голосов
/ 31 мая 2020

Кто-нибудь знает, почему период времени игнорируется и как я могу также отправить период времени со значениями года, месяца и даты. Любая помощь будет очень признательна.

Время не игнорируется. В функции:

const toIsoString = (year, month, day) => 
  moment(new Date(year, month - 1, day)).toISOString(true).split('.')[0];

значения часа, минуты, секунды и миллисекунды опущены, поэтому по умолчанию они равны 0. Какого времени вы ожидаете?

Если вы хотите текущее местное время добавлен к дате, затем создайте дату и установите год, месяц и день на требуемые значения без изменения времени (хотя я не знаю, зачем вам это нужно).

Вместо создавая строку, которую затем необходимо обработать, укажите момент. js желаемый формат:

function toIsoString (year, month, day) { 
  return moment(new Date().setFullYear(year, month-1, day)).format('YYYY-MM-DD HH:mm:ss');
}

console.log(toIsoString('2021','1','1'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>

Вы также можете сделать это без библиотеки, см. Как отформатировать JavaScript дату , например :

function formatDate(year, month, date) {
  let z = n => (n<10?'0':'') + Number(n);
  return `${year}-${z(month)}-${z(date)} ${
    new Date().toLocaleString('en',{
      hour12:false,
      hour:'2-digit', 
      minute:'2-digit', 
      second:'2-digit'})
  }`;
}

console.log(formatDate('2021','1','01'))
0 голосов
/ 30 мая 2020

Это потому, что вы устанавливаете только год, месяц и дату при создании объекта момента. Вы не устанавливаете время

Вы должны сделать что-то вроде

const toIsoString = (year, month, day) => {
    const currDate = moment(new Date());
    currDate.year(year);
    currDate.month(month - 1);
    currDate.date(day);
    return currDate.toISOString(true).split('.')[0];
}

Или просто использовать set функцию

const toIsoString = (year, month, day) => {
    const currDate = moment(new Date());
    currDate.set({
        'year': year,
        'month': (month - 1),
        'date': day
    });
    return currDate.toISOString(true).split('.')[0];
}
...