Javascript React中使用moment.js格式化日期时出现问题

Javascript React中使用moment.js格式化日期时出现问题,javascript,reactjs,Javascript,Reactjs,我在React中使用开放天气图API创建天气应用程序,正如你们所知,API为我们提供了5天/3小时的天气预报数据。此外,由于API默认使用GMT Unix时间戳格式,我决定将其格式化为“MM-DD-YYYY”,以便轻松处理日期。但问题是,当我试图在moment.js中将“MM-DD-YYYY”进一步转换为LT格式时,我在date中丢失了time-date,默认情况下,所有时间都是12:00 AM。如果我们尝试将原始的GMT Unix时间戳格式转换为“MM-DD-YYYY”,然后将“MM-DD-Y

我在React中使用开放天气图API创建天气应用程序,正如你们所知,API为我们提供了5天/3小时的天气预报数据。此外,由于API默认使用GMT Unix时间戳格式,我决定将其格式化为“MM-DD-YYYY”,以便轻松处理日期。但问题是,当我试图在moment.js中将“MM-DD-YYYY”进一步转换为LT格式时,我在date中丢失了time-date,默认情况下,所有时间都是12:00 AM。如果我们尝试将原始的GMT Unix时间戳格式转换为“MM-DD-YYYY”,然后将“MM-DD-YYYY”进一步转换为“LT”,我们是否会损失GMT Unix时间戳中的时间

import React,{Fragment,Component}来自“React”;
导入“bootstrap/dist/css/bootstrap.min.css”;
从“/Containers/SearchBox/SearchBox”导入搜索框;
从“/Components/Header/Header”导入标题;
从“/App.module.css”导入样式;
从“/Containers/CardContainer/CardContainer”导入CardContainer;
从“/Components/Footer/Footer”导入页脚;
从“react Router dom”导入{BrowserRouter as Router,Route,Switch};
从“/Components/About/About”导入关于;
从“axios”导入axios;
从“/Components/WeatherDay/WeatherDay”导入WeatherDay;
类应用程序扩展组件{
状态={
标题:空
};
getTitle=位置=>{
axios
.得到(
`http://api.openweathermap.org/data/2.5/forecast?q=${location}&APPID=7ad09d078633b652ecef8587a337639e&units=metric`
)
。然后(res=>{
这是我的国家({
标题:res
});
})
.catch(错误=>{
控制台日志(err);
});
};
render(){
返回(
(
{this.state.title&&this.state.title.data.city.name}
)}
/>
(
)}
/>
);
}
}
导出默认应用程序;
从“React”导入React;
导入“/WeatherDay.module.css”;
从“时刻”中导入时刻;
const WeatherDay=props=>{//这是我在转换时遇到问题的组件
常=
道具名称&&
props.title.data.list.map(项=>({
日期:时间(新日期(item.dt_txt))。格式(“MM-DD-YYYY”),
main:item.main,
天气:item.weather
}));
const chosenDate=props.match.params.date;
康斯特日=
道具名称&&
allDays.filter((项目,索引)=>{
返回项.date==chosenDate;
});
康斯特米尔=
道具名称&&
map(item=>{//这里我试图将“MM/DD/YYYY”转换为“LT”并丢失时间信息
返回{时刻(新日期(item.Date)).format(“LT”)}

; }); 返回( {mir} ); })} ); }; 出口默认天气日;

我想你把这里的事情弄混了。您不应该使用时间字符串来实际计算它,只应更改日期的格式,而应保留实际时刻对象以供进一步计算。这样你总是有正确的时间和日期。

我想你是在已经格式化的日期上格式化的。您应该支持矩对象,而不是格式化日期

应仅在渲染时设置日期的格式。当我们经过物体时,我们经过瞬间

范例

let parsed = moment(new Date())
let format1 = parsed.format('MM-DD-YYYY')
let format2 = parsed.format('LT')
console.log(format1) // 09-20-2019
console.log(format2) // 3:43 PM

希望有帮助

我想问题就在于此

date: moment(new Date(item.dt_txt)).format("MM-DD-YYYY")
当你们像上面那个样转换日期时,它去掉了时间,你们得到了简单的日期

应该是这样,

date: moment(new Date(item.dt_txt)).format("MM-DD-YYYY, h:mm:ss a")

提供您正在转换的sampe日期。@ravibagul91,好的,添加了我对WeatherDay组件的转换有问题,下面是上面的代码块。谢谢:)@ravibagul91,如果有不清楚的地方,请告诉我:)。谢谢你的帮助嗨,狄更斯,检查我的解决方案,让我知道这是否有帮助。@ravibagul91,嗨,伙计,我试过了,但没有结果:(.让我解释一下逻辑,我故意用“MM-DD-YYYY”从日期中删除时间。由于open weather map提供5/3 json,我希望根据用户单击的日期获取所有数据,例如,如果用户在星期三单击,则应检索有关星期三的所有数据。如果我不删除时间,则只会向我提供一个数据,但我需要所选日期的所有数据。嗨,伙计,TLDR,我转换为“MM-DD-YYYY”获取所选日期的所有数据(如果我不这样做,那么我将只获取某一天的一个数据)然后在我得到所有数据后,我想重新格式化它,这样我就有了时间数据并将其显示给用户。因此我使用了LT格式,但它给了我所有数据12:00 AM,但第一个数据应该是3:00 AM,第二个数据是6:00 AM,第三个数据是9:00 AM应用格式-矩(item.date)。格式('..)===chosenDate inside allDays.filter,这样您就不必转换为字符串,并且可以到处传递矩对象。第二种方法是添加已解析矩对象的另一个属性。
date: moment(new Date(item.dt_txt)).format("MM-DD-YYYY, h:mm:ss a")