使用 JS Date 函数时如何避免区域设置时区转换

发布于 2025-01-17 03:53:21 字数 231 浏览 0 评论 0原文

在javascript中使用new Date()时如何避免本地时区转换,例如,今天是“2022-03-24”,如果我使用new Date(“2022-03-24”),我会得到不同的结果不同国家/地区的日期,如何避免这种对话并仅使用日期,由于日期选择器,我还需要日期对象。

这是一个解决方案吗?

let date = new Date(2022, 02, 24, 0, 0, 0, 0)

How to avoid the local timezone conversions when working with new Date() in javascript, for example, today is "2022-03-24", if I use new Date("2022-03-24") I'll be getting different dates in different countries, how to avoid this conversation and use only the date, also I need the date object because of the date picker.

is this a solution?

let date = new Date(2022, 02, 24, 0, 0, 0, 0)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

罪歌 2025-01-24 03:53:21

有几点:

  • 由于您使用的格式,您的 new Date("2022-03-24") 示例的输入将被解释为午夜 UTC。它与 new Date("2022-03-24T00:00:00.000Z") 相同。使用 new Date(Date.UTC(2022, 2, 24, 0, 0, 0, 0)) 也会得到相同的结果。
  • 由于您使用的构造函数,您的 new Date(2022, 2, 24, 0, 0, 0, 0) 示例会将输入解释为本地时间。它提供与 new Date("2022-03-24T00:00:00.000") 相同的输出(不带 Z)。
  • Date 对象本身没有时区 - 它只是基于 UTC 的 Unix 时间戳的包装。
  • 您对生成的 Date 对象执行的操作与您是否会观察时区转换和创建时区转换一样重要。例如,toString 将提供以本地时间表示的字符串表示形式,而 toISOString 将提供以 UTC 表示的字符串表示形式。
  • 因此,完全避免任何时区转换的唯一方法是根据 UTC 进行构造,然后仅使用以 UTC 形式输出的函数(例如 toISOString)或获取/set 以 UTC 表示(例如 getUTCHourssetUTCHours 等)
  • 您提到您正在使用日期选择器。
    • 许多日期选择器都具有返回 Date 对象的属性,但某些会返回 yyyy-mm-dd 格式的字符串。如果您的目标是将所选日期传递给后端 API,则应避免使用 Date 对象。只需取出字符串并发送即可。标准 就是一个很好的例子。请参阅文档了解其值< /code> 属性了解更多详细信息。
    • 如果您的日期选择器提供Date对象,那么它很可能是根据用户的本地时区构建的。您应该自己创建 yyyy-mm-dd 格式的日期字符串(使用基于本地时间的属性 getFullYeargetMonthgetDate),然后将其传递给您的 API。


A few things:

  • Your example of new Date("2022-03-24") will have the input will be interpreted as midnight UTC due to the format you used. It's identical to new Date("2022-03-24T00:00:00.000Z"). You'd also get the same result with new Date(Date.UTC(2022, 2, 24, 0, 0, 0, 0)).
  • Your example of new Date(2022, 2, 24, 0, 0, 0, 0) will have the input interpreted as local time due to the constructor you used. It gives the same output as new Date("2022-03-24T00:00:00.000") (without the Z).
  • The Date object itself has no time zone - it is just a wrapper around a UTC-based Unix timestamp.
  • What you do with the resulting Date object has as much to do with whether you will observe a time zone conversion as creating it does. For example, toString will provide a string representation in terms of local time, but toISOString will provide a string representation in terms of UTC.
  • Thus, the only way to completely avoid any time zone conversions is to construct in terms of UTC and then only use functions that output in terms of UTC (like toISOString) or get/set in terms of UTC (like getUTCHours, setUTCHours, etc.)
  • You mentioned you are using a date picker.
    • Many date pickers will have properties that give you back a Date object, but some will instead give you back a string in yyyy-mm-dd format. If your goal is to pass along the chosen date to a back end API, you should avoid using a Date object. Just take the string and send that instead. The standard <input type="date"> is a good example. See the docs for its Value property for more details.
    • If your date picker only provides a Date object, then chances are it was constructed in terms of the user's local time zone. You should make a date string in yyyy-mm-dd format yourself (using the local time based properties getFullYear, getMonth, and getDate), and then pass that to your API.
伴我老 2025-01-24 03:53:21

您可以使用 Date.UTC() 创建 UTC 日期。这样,您就可以避免本地时区转换。

let date = new Date(Date.UTC(2022, 2, 24)); // Month is 0-based (2 = March)
console.log(date.toISOString()); // Output: "2022-03-24T00:00:00.000Z"

You can use Date.UTC() to create a date in UTC. This way, you avoid the local time zone conversion.

let date = new Date(Date.UTC(2022, 2, 24)); // Month is 0-based (2 = March)
console.log(date.toISOString()); // Output: "2022-03-24T00:00:00.000Z"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文