使用javascript和格式化日期清理数据

使用javascript和格式化日期清理数据,javascript,arrays,data-cleaning,Javascript,Arrays,Data Cleaning,我做了一个清除空值的函数,但它没有我预期的那么好。 这是我的更改日期函数 此函数从thingspeak获取生成的日期,并将其更改为更好的阅读。我添加了日期短版本和更长版本的选项 function getDate(oldDate, extended) { const date = new Date(oldDate); const d = date.getDate(); let m = date.getMonth() + 1; const y = date.getFullYear()

我做了一个清除空值的函数,但它没有我预期的那么好。 这是我的更改日期函数

此函数从thingspeak获取生成的日期,并将其更改为更好的阅读。我添加了日期短版本和更长版本的选项

function getDate(oldDate, extended) {
  const date = new Date(oldDate);
  const d = date.getDate();
  let m = date.getMonth() + 1;
  const y = date.getFullYear();
  const h = date.getHours();
  let min = date.getMinutes();

  if (m < 10) {
    m = "0" + m;
  }
  if (min < 10) {
    min = "0" + min;
  }
  let convertedDate;

  extended
    ? (convertedDate = `${h}:${min} ${d}/${m}/${y}`)
    : (convertedDate = `${d}/${m}/${y}`);

  return convertedDate;
}
我不知道我做了什么坏事,但我得到了这个输出

[
    {
        "created_at": "NaN/NaN/NaN",
        "field1": "366.9",
        "field2": "888.1"
    },
    {
        "created_at": "NaN/NaN/NaN",
        "field1": "22.3",
        "field2": "56.625"
    }
]
我也会发布肮脏的数据

{

        "channel": {
            "id": 1353918,
            "name": "Air quality meter",
            "latitude": "0.0",
            "longitude": "0.0",
            "field1": "PM25",
            "field2": "PM10",
            "created_at": "2021-04-09T20:51:56Z",
            "updated_at": "2021-04-09T20:51:56Z",
            "last_entry_id": 208
        },
        "feeds": [
            {
                "created_at": "2021-05-22T00:00:00Z",
                "field1": null,
                "field2": null
            },
            {
                "created_at": "2021-05-23T00:00:00Z",
                "field1": null,
                "field2": null
            },
            {
                "created_at": "2021-05-24T00:00:00Z",
                "field1": "366.9",
                "field2": "888.1"
            },
            {
                "created_at": "2021-05-25T00:00:00Z",
                "field1": "22.3",
                "field2": "56.625"
            },
            {
                "created_at": "2021-05-26T00:00:00Z",
                "field1": null,
                "field2": null
            },
            {
                "created_at": "2021-05-27T00:00:00Z",
                "field1": null,
                "field2": null
            },
            {
                "created_at": "2021-05-28T00:00:00Z",
                "field1": null,
                "field2": null
            },
            {
                "created_at": "2021-05-29T00:00:00Z",
                "field1": null,
                "field2": null
            },
            {
                "created_at": "2021-05-29T00:00:00Z",
                "field1": null,
                "field2": null
            }
        ]
    }
目前,只有日期格式化不起作用,但我在codesandbox中测试了相同的代码,效果良好。如果有人对这个问题有疑问,请写下来。谢谢

如果查看,您会发现日期解析会因主机而异。这解释了为什么它在codesandbox中工作,而不是在您的机器中工作

引用它:

解析日期的字符串表示形式,并返回自1970年1月1日、00:00:00 UTC或NaN以来的毫秒数。如果字符串无法识别,或者在某些情况下包含非法的日期值(…),则不同主机解析日期字符串的方式仍有许多差异,因此应手动解析日期字符串(如果要适应多种不同的格式,库可以提供帮助)

我的建议是使用解析和处理日期。它还可以帮助您格式化输出,这样您就不必自己处理:

function getDate(oldDate, extended) {
  const date = moment(oldDate);
  if (!date.isValid()) { throw new Error(`Invalid date: ${oldDate}`); }
  
  if(extended) {
    return date.format("HH:mm DD/MM/YYYY");
  } else {
    return date.format("DD/MM/YYYY");
  }
}
function getDate(oldDate, extended) {
  const date = moment(oldDate);
  if (!date.isValid()) { throw new Error(`Invalid date: ${oldDate}`); }
  
  if(extended) {
    return date.format("HH:mm DD/MM/YYYY");
  } else {
    return date.format("DD/MM/YYYY");
  }
}