服务器和客户端中的Node Js和React js SSR时间不匹配

时间:2018-10-05 08:02:18

标签: node.js reactjs datetime-format ssr

我正在处理Node js和React js服务器端渲染。我遇到了一个问题。我在MongoDB上以ISO格式节省了时间,因此我需要将其转换为常规格式,并且由于服务器的时区和客户端的时区的不同,服务器和客户端之间的转换结果有所不同(我需要MM / dd / YYYY HH :mm格式)。当然,react会对此发出警告。我使用了moment.js和toLocalString()。你们有解决这个问题的可能解决方案吗?

非常感谢你们。

1 个答案:

答案 0 :(得分:0)

正如您所说,问题是由于服务器的时区和客户端的时区之间的差异引起的。解决此问题的一种方法是在服务器上呈现ISO时间戳,然后在componentDidMount()的客户端中将其替换为本地时间。

React docs saycomponentWillMount()是服务器渲染上唯一调用的生命周期方法,因此可以安全地在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
})
相关问题