Angular datapicker发送有关日期的太多数据,需要转换

时间:2018-06-10 09:22:31

标签: javascript angular typescript datepicker

使用Angular 5,我使用了一些npm包作为日期

import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';

问题是我需要发送到服务器的是

仅此格式

2018-05-23

然而,它正在发送所有这些

Tue%20May%2022%202018%2017:00:00%20GMT-0700%20(US%20Mountain%20Standard%20Time)

全程服务电话

http://server:9080/RxPace/rest/config/users?eff-date=Tue%20May%2022%202018%2017:00:00%20GMT-0700%20(US%20Mountain%20Standard%20Time)

我该怎么转换呢?

1 个答案:

答案 0 :(得分:3)

%20是空间URI编码的(你到处都可以看到,所以记住这是件好事) 这意味着我们可以:

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)";

这看起来像一个有效的日期字符串,所以我们可以将它传递给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)

由于您所需的格式与toISOString格式非常相似,我们只需使用它并在“T”处拆分。

const myFormat = new Date(str).toISOString().split("T")[0];
// returns "2018-05-23" (or whatever your locale might be).

可能需要一些错误检查。 (如果日期有效或无效)。

对于任何更高级的内容,我只需提入date-fns

编辑:(哦,我猜我的阅读理解能力与往常一样。但是,我认为toISOString()和split是最简单的选择(因为看起来你已经有了一个Date对象),而不会拉其他东西。然后有https://danielykpan.github.io/date-time-picker/#locale-formats ...)

(您的问题是您正在尝试发送日期对象而不是字符串。)