Выводить ГГГГ-ММ-ДД не полную строку даты

Я хочу обновить дату, связанную с ngModel, используя ngx-bootstrap datepicker, а затем отправить ее в запросе PUT на мой сервер Django. Но формат даты продолжает меняться с YYYY-MM-DD (2019-08-13) на полную строку даты javascript (2019-08-13T23: 00: 00.000Z), что не позволит мне отправить запрос PUT.

Я пробовал почти все, что мог найти по всем остальным проблемам, и это просто не работает, ничто не позволит мне выбрать его как YYYY-MM-DD и оставить его таким в запросе PUT. Любая помощь очень ценится.

<input class="form-control" 
#dp="bsDatepicker" 
bsDatepicker
[(ngModel)]="project.Start_Date2"
name="Start_Date2" 
[bsConfig]="{
    dateInputFormat: 'YYYY-MM-DD',
    isAnimated: true, 
    containerClass: 'theme-default' 
}">

Я просто хочу иметь возможность отправить свой запрос PUT с форматом даты как ГГГГ-ММ-ДД. Я не уверен, что ngx-bootstrap сделает это, потому что, когда я выбираю дату, он преобразует ее в длинную строку, которая затем не работает в запросе PUT.


person otemale    schedule 14.08.2019    source источник
comment
Средство выбора даты присваивает ngModel объект даты. Вам нужно отформатировать дату вручную, чтобы создать строку, отформатированную в соответствии с вашими требованиями.   -  person 31piy    schedule 14.08.2019
comment
Где бы я отформатировал это вручную, но у меня все еще есть хороший пользовательский интерфейс datepicker - это то, о чем я спрашиваю, правда, я думаю?   -  person otemale    schedule 14.08.2019
comment
Вы можете использовать библиотеку, такую ​​как MomentJS, для ручного форматирования объекта даты. Вам необходимо отформатировать дату перед вызовом вашего API.   -  person 31piy    schedule 14.08.2019
comment
Итак, если у меня есть (щелчок), который вызывает функцию обновления и API, тогда я должен отформатировать дату там?   -  person otemale    schedule 14.08.2019
comment
Да, перед отправкой в ​​API нужно отформатировать.   -  person 31piy    schedule 14.08.2019
comment
А затем просто установите project.Start_Date на отформатированную версию в методе обновления?   -  person otemale    schedule 14.08.2019


Ответы (1)


Причина, по которой формат даты продолжает возвращаться, заключается именно в том, что вы используете ngModel, т.е. двусторонняя привязка. Ngx-datepicker продолжает подталкивать выбранное значение к вашей связанной переменной (Start_Date2). Это нормально и ожидаемо.

Я не знаю, как вы выполняете свой запрос PUT, но вам нужно будет выполнить преобразование формата либо на лету внутри функции запроса, либо ввести другую переменную, которая будет содержать вашу дату в желаемом формате.

Я предполагаю, что вы используете угловой HttpClient, и запрос на размещение выглядит примерно так

this.http.put('https://example.com/dates/1', project.Start_Date2)

Итак, что вы можете сделать, так это создать функцию преобразования и преобразовать формат внутри вызова put.


function myDateFormatFunction(inputDate) {
  let d = new Date(inputDate) // this might not be needed if the date is already a Date() object
  // YYYY-MM-DD
  return d.getFullYear() + '-' + ('0' + (d.getMonth()+1)).slice(-2) + '-' + ('0' + d.getDate()).slice(-2); // the zeroes and slice weirdness is to have nice padding, borrowed from https://stackoverflow.com/a/3605248/3158815
}

this.http.put('https://example.com/dates/1', myDateFormatFunction(project.Start_Date2))

person jiroch    schedule 14.08.2019
comment
большое спасибо! Я весь день пытаюсь решить эту проблему, вы мне очень просто помогли! - person otemale; 14.08.2019
comment
на самом деле теперь он работает, но выдает ошибку Type 'string' is not assignable to type 'Date'. Мой код project.Start_Date = myDateFormatFunction(project.Start_Date);. Затем используется project: this.projectService.updateProject(project).subscribe();. Которая затем используется в сервисе с var httpudpdate: any = this.http.put('/ph/projects/'+project.id+'/', project) - person otemale; 14.08.2019
comment
Привязан ли project.Start_Date к datepicker? По-видимому, project.Start_Date объявлен как объект Date. Другими словами - в myDateFormatFunction входная переменная имеет тип Date, а возвращаемое значение - тип string. Вы не можете присвоить возвращаемое значение обратно в project.Start_Date, поскольку они бывают разных типов. Вы можете ввести другую переменную (Date) и привязать к ней datepicker, и project.Start_Date будет строкой - person jiroch; 14.08.2019