使用javascript和格式化日期清理数据
我做了一个清除空值的函数,但它没有我预期的那么好。 这是我的更改日期函数 此函数从thingspeak获取生成的日期,并将其更改为更好的阅读。我添加了日期短版本和更长版本的选项使用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()
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");
}
}