javascript - Angular datapicker skickar för mycket data om ett datum och behöver konverteras
Med Angular 5 använder jag ett npm-paket för datum
import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';
Problemet är att det jag BEHÖVER skicka till servern är
detta format endast
2018-05-23
Men det skickar allt detta
Tue%20May%2022%202018%2017:00:00%20GMT-0700%20(US%20Mountain%20Standard%20Time)
Full service-samtal
http://server:9080/RxPace/rest/config/users?eff-date=Tue%20May%2022%202018%2017:00:00%20GMT-0700%20(US%20Mountain%20Standard%20Time)
Hur kan jag konvertera det?
Svar #1
%20 är ett URI-kodat mellanslag (du ser det överallt, så det är bra att komma ihåg) Vilket betyder att vi bara kan:
const str = decodeURIComponent("Tue%20May%2022%202018%2017:00:00%20GMT-0700%20(US%20Mountain%20Standard%20Time)");
// which gives: "Tue May 22 2018 17:00:00 GMT-0700 (US Mountain Standard Time)";
Och det ser ut som en giltig datum-sträng, så vi kan helt enkelt skicka den till Date...
new Date(str); // Note that this will return the date in YOUR locale.
// In my case: Wed May 23 2018 09:00:00 GMT+0900 (Japan Standard Time)
Eftersom ditt obligatoriska format är mycket likt toISOString-formatet, kommer vi helt enkelt att använda det och dela vid "T".
const myFormat = new Date(str).toISOString().split("T")[0];
// returns "2018-05-23" (or whatever your locale might be).
Kan behöva viss felkontroll. (Till exempel om datumet är giltigt eller inte).
För något mer avancerat skulle jag bara ta in date-fns
Redigera: (Åh, jag antar att mina läsförståelsefärdigheter är ur funktion som vanligt. Ändå tror jag att toISOString() och split är det enklaste alternativet (eftersom det verkar som att du redan har ett Date-objekt) utan att dra in andra saker. Sedan finns det https://danielykpan.github.io/date-time-picker/#locale-formats ...)
(Ditt problem är att du försöker skicka ett datumobjekt istället för en sträng.)
