【发布时间】:2019-09-20 09:39:56
【问题描述】:
我正在使用 Open Weather Map API 在 React 中创建天气应用程序,如您所知,API 为我们提供了 5 天/3 小时预报的数据。此外,由于 API 默认使用 GMT Unix 时间戳格式,我决定将其格式化为“MM-DD-YYYY”以便轻松处理日期。但问题是当我尝试在 moment.js 中进一步将“MM-DD-YYYY”转换为 LT 格式时,我丢失了 date 中的时间日期,默认情况下所有时间都为 12:00 AM。如果我们尝试将原始 GMT Unix 时间戳格式转换为“MM-DD-YYYY”,然后将“MM-DD-YYYY”进一步转换为“LT”,我们是否会丢失 GMT Unix 时间戳中的时间?
import React, { Fragment, Component } from "react";
import "bootstrap/dist/css/bootstrap.min.css";
import SearchBox from "./Containers/SearchBox/SearchBox";
import Header from "./Components/Header/Header";
import styles from "./App.module.css";
import CardContainer from "./Containers/CardContainer/CardContainer";
import Footer from "./Components/Footer/Footer";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import About from "./Components/About/About";
import axios from "axios";
import WeatherDay from "./Components/WeatherDay/WeatherDay";
class App extends Component {
state = {
title: null
};
getTitle = location => {
axios
.get(
`http://api.openweathermap.org/data/2.5/forecast?q=${location}&APPID=7ad09d078633b652ecef8587a337639e&units=metric`
)
.then(res => {
this.setState({
title: res
});
})
.catch(err => {
console.log(err);
});
};
render() {
return (
<Router>
<div className={styles.App}>
<Fragment>
<Header title={"Weather App"} />
<Switch>
<Route
path="/"
exact
render={props => (
<Fragment>
<div className="container">
<SearchBox getRequest={this.getTitle} />
</div>
<main className={styles.mainContent}>
<h1 className={styles.cityWeather}>
{this.state.title && this.state.title.data.city.name}
</h1>
<CardContainer
weatherData={
this.state.title && this.state.title.data.list
}
/>
</main>
</Fragment>
)}
/>
<Route path="/about" component={About} />
<Route
path="/day/:date"
render={props => (
<WeatherDay {...props} title={this.state.title} />
)}
/>
</Switch>
<Footer copyright={"Copyright 2018"} />
</Fragment>
</div>
</Router>
);
}
}
export default App;
import React from "react";
import "./WeatherDay.module.css";
import moment from "moment";
const WeatherDay = props => { // This is the component where I have a problem with conversion
const allDays =
props.title &&
props.title.data.list.map(item => ({
date: moment(new Date(item.dt_txt)).format("MM-DD-YYYY"),
main: item.main,
weather: item.weather
}));
const chosenDate = props.match.params.date;
const day =
props.title &&
allDays.filter((item, index) => {
return item.date === chosenDate;
});
const mir =
props.title &&
day.map(item => { //Here I am trying to convert "MM/DD/YYYY" into "LT" and lose time info
return <p>{moment(new Date(item.date)).format("LT")}</p>;
});
return (
<div className="row">
<div className="col-md-2"></div>
{mir}
</div>
);
})}
</div>
);
};
export default WeatherDay;
【问题讨论】:
-
提供您要转换的采样日期。
-
@ravibagul91,好的,补充说我在 WeatherDay 组件中的转换存在问题,该组件位于上面的代码块下方。谢谢:)
-
@ravibagul91,如果有什么不清楚的地方请告诉我:)。感谢您的帮助
-
嗨狄更斯,检查我的解决方案,如果有帮助,请告诉我。
-
@ravibagul91,嗨,伙计,我试过了,但没有结果:(。让我解释一下逻辑,我故意使用“MM-DD-YYYY”来删除日期中的时间。因为打开的天气图提供了 5 /3 json,我想根据用户点击的日期获取所有数据,例如,如果用户在星期三点击,则应检索有关星期三的所有数据。如果我不删除时间,那么只会给我一个数据,但我想要所选日期的所有数据。
标签: javascript reactjs