在js中创建日期忽略时区

问题描述 投票:0回答:3

在js中是否可以创建一个不受时区影响的日期对象? 例如我想设置年份“2015”,月份“03”和日期“31”。

var ex = new Date(2015,3,31);

如果我“打印”这个变量现在它看起来像这样:

Fri May 01 2015 00:00:00 GMT+0200 (ora legale Europa occidentale)

更改为第二天。有可能避免这种情况吗?如何创建一个在每个时区始终相同的 Date 对象?

我需要尽快将此行为包含在应用程序中,并且我不能仅使用字符串,因为我们必须使用适用于日期对象的日期选择器插件(Bootstrap)。

提前致谢

javascript date datepicker timezone
3个回答
3
投票

是的!如果您使用 Date.UTC 函数创建所有 Date 对象,那么它们都将相对于标准 UTC 时区,即使用户的浏览器设置了不同的时区。

例如:

var ex = new Date( Date.UTC( 2015, 3, 31 ) );

这将为

3/31/2015 UTC
创建一个 Date 对象,并且在所有浏览器中保持一致,无论其默认时区如何。

在内部,

ex
内的日期仍将按照用户的本地时区进行转换。因此,如果您从中读取值(例如日期),它将相对于用户的浏览器时间。

因此,如果您需要读取 UTC 时间,您可以执行以下操作:

ex.getUTCYear(); // 2015
ex.getUTCMonth(); // 3
ex.getUTCDate(); // 31

这将为您提供 UTC 时间的值。


2
投票

简短的回答是你不能。

Date 对象只是系统时间设置的访问器(因此无论如何它都会使用本地计算机时区)。然后,您可以通过使用 getTimezoneOffset() 减去本地时区或使用 setUTCHours() 强制设置时间来操作日期。

但是,如果您的应用程序中只能使用一个时区,则可以使用 moment.js 获取该特定时区的日期时间:

moment().tz("America/Los_Angeles").format();


0
投票

如果您将日期作为字符串传递,它将创建 UTC 格式的日期。

const t1 = new Date(2024,11,12) // 11 because month starts at 0
// -> '2024-12-11T23:00:00.000Z' (I am in UTC+1)

const t2 = new Date("2024-12-12")
// '2024-12-12T00:00:00.000Z'
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.