小能豆

带或不带时区的日期字符串

javascript

我有两种日期字符串返回到用户界面。一种日期格式具有时区,而另一种则没有。

有时区的日期字符串正确显示日期,但没有时区的 yyyy-mm-dd 格式的日期字符串显示前一个日期。

我怎样才能正确处理这两种情况?当我拥有的字符串采用 yyyy-mm-dd 格式时,如何获得正确的日期?示例:“2022-03-25”

这是我在我的应用程序中的使用方式:

const d = new Date("2022-03-25"); // Thu Mar 24 2022 19:00:00 GMT-0500 - This shows previous date.
const x = new Date("2022-12-14T06:03:14Z"); // Dec 14 2022 00:03:14 GMT-0600 - This shows correct date

更新:这可行,但正在寻找一种更优雅/更有效的方法。请帮忙

const parsed = value.includes('T') ? new Date(value) 
: new Date(value.replace(/-/g, '/'));

阅读 125

收藏
2023-08-03

共1个答案

小能豆

您可以使用 Date.UTC() 方法来处理没有时区信息的日期字符串,以确保得到正确的日期对象。Date.UTC() 方法接受年、月、日和可选的小时、分钟、秒和毫秒参数,并返回相对于协调世界时(UTC)1970 年 1 月 1 日 00:00:00 的毫秒数。通过这种方式,您可以确保正确地创建日期对象,而不受本地时区的影响。

您可以修改您的代码如下:

const d = new Date("2022-03-25"); // Thu Mar 24 2022 19:00:00 GMT-0500 (Central Daylight Time) - This shows previous date.

const parts = "2022-03-25".split('-');
const x = new Date(Date.UTC(parts[0], parts[1] - 1, parts[2])); // Mar 25 2022 00:00:00 GMT+0000 (Coordinated Universal Time) - This shows correct date

请注意,月份的参数需要减去 1,因为在 JavaScript 中,月份是从 0 开始计数的(0 表示一月,1 表示二月,以此类推)。

通过使用 Date.UTC() 方法,您可以确保对没有时区信息的日期字符串得到正确的日期对象,而无需对其进行额外的字符串处理。这将使您的代码更加简洁和可读。

2023-08-03