Typescript将对象字符串转换为日期格式mm / dd / yyyy

时间:2018-04-23 18:34:15

标签: javascript typescript

我有大量不同的对象。它们是字符串,它们来自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"的字符串的日期。如何动态更改数据?

3 个答案:

答案 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>:100100.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);
    }
}

无论如何,我的解决方案如下,尽管我更喜欢映射理念:

&#13;
&#13;
{{1}}
&#13;
&#13;
&#13;