在我的Next.js 13.2.4应用程序中,我有一个名为getLocalTime(date)
的助手函数,它以特定格式返回客户机的本地时间。
//Output format: 9:30PM
export function getLocalTime(date) {
const localTime = new Date(date).toLocaleTimeString("en-US", {
hour: "numeric",
minute: "numeric",
hour12: true,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
});
return localTime;
}
当我使用npm run dev
在本地运行应用程序时,该函数返回相对于我的本地时间的正确时间。然而,当我将应用程序部署到Vercel时,我注意到服务器组件使用的是UTC时区,而客户端组件使用的是用户的实际时区。
所以我试着像这样硬编码时区。
//Output format: 9:30PM
export function getLocalTime(date) {
const BucharestTimezone = "Europe/Bucharest";
const localTime = new Date(date).toLocaleTimeString("en-US", {
hour: "numeric",
minute: "numeric",
hour12: true,
timezone: BucharestTimezone,
});
return localTime;
}
但问题还是一样。
我的问题是:如何确保Next.js中的服务器组件使用客户端机器的时区,而不是UTC?
2条答案
按热度按时间t1qtbnec1#
默认情况下,Next.js服务器组件使用UTC时区。您可以尝试moment.js。因为moment js将始终根据客户端设备时区返回时间。
o8x7eapl2#
我设法通过使用Luxon或date-fns-tz库解决了这个问题。
最后,我选择使用date-fns-tz,因为它需要较少的代码重构。
方案一:使用date-fns-tz
在这里,我使用
utcToZonedTime
将客户端和服务器组件的时间转换为UTC,然后为它的第二个参数指定一个时区,我希望时间以. ex为单位:Europe/Bucharest
方案二:使用Luxon