unix 将日期时间转换为用户的时间

pprl5pva  于 5个月前  发布在  Unix
关注(0)|答案(1)|浏览(63)

我正在使用dayjs,并试图根据用户的语言环境实现日期时间转换。
举例说明;
我的数据是2024年4月15日美国/多伦多16:00。我想将其转换为用户的时区-即澳大利亚/悉尼或欧洲/巴黎或任何地方。此外,我得到的数据不仅来自美国/多伦多,它可能是一个不同的时区,所以我需要使其动态,太。
我以为unix timestamp有时区的信息(我真傻),所以我试图转换,但意识到它不起作用,因为unix是基于utc的。我不想使用momentjs来做这件事,我想我们应该可以通过dayjs或vanilla js来做这件事。

hmmo2u0o

hmmo2u0o1#

请参阅插件timezoneGitHub current commit permalink)的文档和formattingpermalink)的部分。这里有一个可运行的片段来演示:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dayjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/plugin/utc.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/plugin/timezone.js"></script>
<script type="module">
  // Imported as UMD modules in this demo:
  const {
    dayjs,
    dayjs_plugin_timezone: timezone,
    dayjs_plugin_utc: utc,
  } = window;

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

  const dSource = dayjs.tz("2024-04-15 16:00", "America/Toronto"); // in original tz
  const localTimeZone = dayjs.tz.guess();
  const dLocal = dSource.tz(localTimeZone); // in local tz

  const formatStr = "YYYY-MM-DD HH:mm:ss";
  const formatted = `${dLocal.format(formatStr)} ${localTimeZone}`;

  const tzSydney = "Australia/Sydney";
  const formattedSydney = `${dSource.tz(tzSydney).format(formatStr)} ${tzSydney}`;

  console.log("formatted =", formatted) // formatted using your host environment's local time zone
  console.log("formattedSydney =", formattedSydney) // "2024-04-16 06:00:00 Australia/Sydney"
</script>

字符串

相关问题