我有大量不同的对象。它们是字符串,它们来自api看起来如此
const data = [
{
id: 1,
fruit: “apple”,
createdOn: "2016-09-02T23:00:00.000Z",
submittedDate: "2016-09-11T23:00:00.000Z”
},
{
id: 2,
fruit: “banana”,
createdOn: "2016-09-11T23:00:00.000Z”,
submittedDate: "2016-09-11T23:00:00.000Z”
},
{
id: 3,
fruit: “cherry”,
createdOn: "2016-09-13T23:00:00.000Z",
submittedDate: "2016-09-11T23:00:00.000Z”
},
]
this.gridData = data
我将此对象数组分配给解析数据的网格。在将其发送到网格之前,如何将这些字符串日期转换为格式mm / dd / yyyy?
编辑:所以我可以拥有一组数据,这些数据具有动态创建的日期字段。目前在我的例子中,我给了你日期字段名称(createdOn,submittedDate),但是我可以有一个数组,我不知道字段名称是什么。
我们确实有一种方法可以识别这些字段,因为我们的命名约定要求所有日期字段以" Dt"结尾。所以,因为我知道一个字段将是一个基于" Dt"的字符串的日期。如何动态更改数据?
答案 0 :(得分:1)
const data = [{
id: 1,
fruit: "apple",
createdOn: "2016-09-02T23:00:00.000Z",
submittedDate: "2016-09-11T23:00:00.000Z"
},
{
id: 2,
fruit: "banana",
createdOn: "2016-09-11T23:00:00.000Z",
submittedDate: "2016-09-11T23:00:00.000Z"
},
{
id: 3,
fruit: "cherry",
createdOn: "2016-09-13T23:00:00.000Z",
submittedDate: "2016-09-11T23:00:00.000Z"
},
];
const dataWithDT = [{
id: 1,
fruit: "apple",
createdDt: "2016-09-02T23:00:00.000Z",
submittedDt: "2016-09-11T23:00:00.000Z"
},
{
id: 2,
fruit: "banana",
createdDt: "2016-09-11T23:00:00.000Z",
submittedDt: "2016-09-11T23:00:00.000Z"
},
{
id: 3,
fruit: "cherry",
createdDt: "2016-09-13T23:00:00.000Z",
submittedDt: "2016-09-11T23:00:00.000Z"
},
];
function getMMDDYYYY(date) {
var today = new Date(date);
var dd = today.getDate();
var mm = today.getMonth() + 1;
var yyyy = today.getFullYear();
if (dd < 10)
dd = '0' + dd
if (mm < 10)
mm = '0' + mm
return mm + '/' + dd + '/' + yyyy;
}
const formatData = data.map(val => {
val.createdOn = getMMDDYYYY(val.createdOn);
val.submittedDate = getMMDDYYYY(val.submittedDate);
return val;
})
const formatDataWithDt = data.map(val => {
for (var keys in val) {
if (keys.includes("Dt")) {
val[keys] = getMMDDYYYY(val.createdOn);
val[keys] = getMMDDYYYY(val.submittedDate);
}
}
return val;
})
console.log(formatDataWithDt);
答案 1 :(得分:0)
要在Angular中格式化日期,您可以使用Date pipe。
导入管道:
import { CurrencyPipe, DatePipe, DecimalPipe } from @angular/common';
在构造函数中设置它们:
constructor(
private _curency: CurrencyPipe,
private _decimal: DecimalPipe,
private _date: DatePipe,
) { }
在代码中调用它们:
let amount = this._decimal.transform(this.invoice.amount, '1.2-2');
之前的{p>:100
,100.00
之后
let date = this._date.transform(this.invocie.date, 'dd.MM.yyyy HH:mm:ss')
之前的:2016-09-11T23:00:00.000Z
之后:11.06.2016 23:00:00
答案 2 :(得分:0)
我的方法基本上是将所有内容拼接在一起,以创建您想要的任何类型的格式。我会使用角度自定义管道,但是你可以在应用程序的任何地方使用它,而不必担心创建一个服务来容纳方法。在你的HTML中你可以有类似的东西:
const data = [
{
id: 1,
fruit: 'apple',
createdOn: "2016-09-02T23:00:00.000Z",
submittedDate: "2016-09-11T23:00:00.000Z"
},
{
id: 2,
fruit: 'banana',
createdOn: "2016-09-11T23:00:00.000Z",
submittedDate: "2016-09-11T23:00:00.000Z"
},
{
id: 3,
fruit: 'cherry',
createdOn: "2016-09-13T23:00:00.000Z",
submittedDate: "2016-09-11T23:00:00.000Z"
},
]
this.gridData = data;
changeDateFormat(this.gridData);
printContents();
function changeDateFormat(dataChanging) {
for(let someData of dataChanging) {
let year = someData.createdOn.slice(0,4);
let month = someData.createdOn.slice(5,7);
let day = someData.createdOn.slice(8,10);
someData.createdOn = year + '/' + month + '/' + day;
}
}
function printContents() {
for(let someData of this.gridData) {
console.log(someData.createdOn);
}
}
无论如何,我的解决方案如下,尽管我更喜欢映射理念:
{{1}}&#13;