前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >前端固定时区与根据地区动态展示时区的两种实现方式

前端固定时区与根据地区动态展示时区的两种实现方式

原创
作者头像
Lorin 洛林
发布2025-02-07 11:13:48
发布2025-02-07 11:13:48
850
举报

前言

  • 在前端开发中,处理时间显示是一项常见的需求,尤其是当后端返回的是时间戳或者固定时区的时间时。本文将探讨两种主要方式:固定时区显示 和 根据用户所在地区动态展示时区,并提供相应的实现方案。

时区展示

固定时区展示

  • 固定时区适用于所有用户都需要查看相同时区的时间,以后端返回时间戳为例:
代码语言:js
复制
const dayjs = require("dayjs");
const utc = require("dayjs/plugin/utc");
const timezone = require("dayjs/plugin/timezone");

dayjs.extend(utc);
dayjs.extend(timezone);

const timestamp = 1712345678000;  // 后端返回的时间戳
const beijingTime = dayjs(timestamp).tz("Asia/Shanghai").format("YYYY-MM-DD HH:mm:ss");
console.log(beijingTime);  // 输出北京时间

// 输出
2024-04-06 03:34:38

根据用户所在地区动态展示时区

  • 根据用户所在地区自动调整时区,例如国际化应用:

时区获取

  • 现代浏览器支持 Intl.DateTimeFormat().resolvedOptions().timeZone 获取用户所在时区:
代码语言:js
复制
const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(userTimeZone);  // 例如 "Asia/Shanghai"

根据用户时区动态展示

代码语言:js
复制
const dayjs = require("dayjs");
const utc = require("dayjs/plugin/utc");
const timezone = require("dayjs/plugin/timezone");

dayjs.extend(utc);
dayjs.extend(timezone);

const timestamp = 1712345678000;
const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
const localTime = dayjs(timestamp).tz(userTimeZone).format("YYYY-MM-DD HH:mm:ss");
console.log(localTime);

// 输出
2024-04-06 03:34:38

后端返回时间格式处理

  • 某些场景后端应用没有给我们返回标准的时间戳,而是某个一个时区:比如 Asia/Shanghai ,我们可以先标准化UTC时间再转为我们需要的时间:
代码语言:js
复制
// Asia/Shanghai
const dayjs = require("dayjs");
const utc = require("dayjs/plugin/utc");
const timezone = require("dayjs/plugin/timezone");

dayjs.extend(utc);
dayjs.extend(timezone);

const beijingTime = "2024-02-06 20:00:00"; // 原始北京时间
const nyTime = dayjs.tz(beijingTime, "Asia/Shanghai").tz("America/New_York").format("YYYY-MM-DD HH:mm:ss");

console.log(nyTime); // 转换后的纽约时间 2024-02-06 07:00:00

// utc 
const dayjs = require("dayjs");
const utc = require("dayjs/plugin/utc");
const timezone = require("dayjs/plugin/timezone");

dayjs.extend(utc);
dayjs.extend(timezone);

const utcTime = "2024-02-06T12:00:00Z";
const beijingTime = dayjs.utc(utcTime).tz("Asia/Shanghai").format("YYYY-MM-DD HH:mm:ss");
console.log(beijingTime);

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 时区展示
    • 固定时区展示
    • 根据用户所在地区动态展示时区
      • 时区获取
      • 根据用户时区动态展示
  • 后端返回时间格式处理
  • 个人简介
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档