在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)。
提前致谢
是的!如果您使用 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 时间的值。
简短的回答是你不能。
Date 对象只是系统时间设置的访问器(因此无论如何它都会使用本地计算机时区)。然后,您可以通过使用 getTimezoneOffset() 减去本地时区或使用 setUTCHours() 强制设置时间来操作日期。
但是,如果您的应用程序中只能使用一个时区,则可以使用 moment.js 获取该特定时区的日期时间:
moment().tz("America/Los_Angeles").format();
如果您将日期作为字符串传递,它将创建 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'