我正在处理Node js和React js服务器端渲染。我遇到了一个问题。我在MongoDB上以ISO格式节省了时间,因此我需要将其转换为常规格式,并且由于服务器的时区和客户端的时区的不同,服务器和客户端之间的转换结果有所不同(我需要MM / dd / YYYY HH :mm格式)。当然,react会对此发出警告。我使用了moment.js和toLocalString()。你们有解决这个问题的可能解决方案吗?
非常感谢你们。
答案 0 :(得分:0)
正如您所说,问题是由于服务器的时区和客户端的时区之间的差异引起的。解决此问题的一种方法是在服务器上呈现ISO时间戳,然后在componentDidMount()
的客户端中将其替换为本地时间。
React docs say,componentWillMount()
是服务器渲染上唯一调用的生命周期方法,因此可以安全地在componentDidMount()
中编写与时区相关的逻辑。
document.querySelectorAll('...').forEach(el => {
const timestamp = Number(el.textContent)
const timezoneOffset = new Date().getTimezoneOffset() * 60 * 1000 // milliseconds
const localDate = new Date(timestamp - timezoneOffset)
el.textContent = formattedDate(localDate, 'my-custom-format') // use custom formatting here
})