如何在 TypeScript 中将字符串转换为日期对象

在 TypeScript 中将字符串转换为日期对象

Convert a String to a Date object in TypeScript

使用Date()构造函数将字符串转换为DateTypeScript 中的对象。

构造函数Date()将有效的日期字符串作为参数并返回一个Date对象。

索引.ts
const str = '2024-07-21'; const date = new Date(str); console.log(date); // 👉️ 2024-07-21T00:00:00.000Z console.log(date.toDateString()); // 👉️ Sun Jul 21 2024

我们使用
Date()
构造函数将字符串转换为
Date对象。

确保您的日期字符串有效

如果在创建对象时得到无效的日期Date,则需要在将字符串传递给Date()构造函数之前正确格式化该字符串。

索引.ts
const str = '07_21_2024'; const date = new Date(str); console.log(date); // 👉️ Invalid Date

如果您在创建有效Date对象时遇到困难,可以将 2 种类型的参数传递给Date()构造函数:

  1. 一个有效的 ISO 8601 字符串,格式为YYYY-MM-DDTHH:mm:ss.sssZ, 或者只是
    YYYY-MM-DD,如果你只有一个没有时间的日期。
  2. 多个逗号分隔的参数,表示year, (0 = 一月month11 = 十二月)day of the month、、、hoursminutes
    seconds

从日期字符串中获取日期组件

下面是一个示例,它拆分格式为MM/DD/YYYY(可以是任何其他格式)的字符串并将值作为参数传递给Date()构造函数以创建Date对象。

索引.ts
const str = '07/21/2024'; const [month, day, year] = str.split('/'); console.log(month); // 👉️ "07" console.log(day); // 👉️ "21" console.log(year); // 👉️ "2024" const date = new Date(+year, +month - 1, +day); console.log(date); // 👉️ 2024-07-20T21:00:00.000Z

我们在每个正斜杠上拆分字符串以获得月、日和年的值。

索引.ts
const str = '07/21/2024'; // 👇️ [ '07', '21', '2024' ] console.log(str.split('/'));

我们使用
一元加号 (+)
运算符将值转换为数字。

索引.ts
console.log(+'21'); // 👉️ 21 console.log(typeof +'21'); // 👉️ number

1请注意,我们在将它传递给构造函数时从月份中减去Date()

索引.ts
const date = new Date(+year, +month - 1, +day);
这是因为,Date构造函数需要一个从零开始的值,其中 January = 0、February = 1、March = 2 等。

从日期时间字符串中获取日期和时间组件

下面是另一个示例,它创建了一个Date也包含小时、分钟和秒的对象。

索引.ts
const str = '07/21/2024 04:24:37'; const [dateComponents, timeComponents] = str.split(' '); console.log(dateComponents); // 👉️ "07/21/2024" console.log(timeComponents); // 👉️ "04:24:37" const [month, day, year] = dateComponents.split('/'); const [hours, minutes, seconds] = timeComponents.split(':'); const date = new Date(+year, +month - 1, +day, +hours, +minutes, +seconds); // 👇️ Sun Jul 21 2024 04:24:37 console.log(date);

我们首先在空格上拆分日期和时间字符串,这样我们就可以将日期和时间组件作为单独的字符串获取。

然后我们必须在每个正斜杠上拆分日期字符串/以获得月、日和年的值。请注意,您的分隔符可能不同,例如连字符,但方法是相同的。

我们还在每个冒号上拆分时间字符串:,并将小时、分钟和秒分配给变量。

我们将所有参数传递给Date()构造函数以创建一个Date
对象。

如果需要在数据库中存储日期字符串,最好存储日期的 ISO 8601 表示形式。

获取 ISO 格式的日期

您可以通过调用该方法来获取 ISO 格式的日期toISOString()

索引.ts
const str = '07/21/2024 04:24:37'; const [dateComponents, timeComponents] = str.split(' '); console.log(dateComponents); // 👉️ "07/21/2024" console.log(timeComponents); // 👉️ "04:24:37" const [month, day, year] = dateComponents.split('/'); const [hours, minutes, seconds] = timeComponents.split(':'); const date = new Date(+year, +month - 1, +day, +hours, +minutes, +seconds); // 👇️ Sun Jul 21 2024 04:24:37 console.log(date); // 👇️ "2024-07-21T01:24:37.000Z" console.log(date.toISOString());

toISOString
方法根据通用时间返回 ISO 8601 格式

日期字符串。

ISO 字符串可以很容易地传递给Date()构造函数以创建新
Date对象。

使用 date-fns 在 TypeScript 中将字符串转换为日期

您还可以使用date-fns模块将字符串转换为 TypeScript 中的日期。

首先,确保通过从项目的根目录运行以下命令来安装模块。

# 👇️ with NPM npm install date-fns # 👇️ with YARN yarn add date-fns

现在您可以导入和使用模块parse()中的函数date-fns

索引.js
import { parse } from 'date-fns'; const str = '09-24-2024 09:44:21'; const date = parse(str, 'MM-dd-yyyy hh:mm:ss', new Date()); console.log(date); // 👉️ 2024-09-24T06:44:21.000Z

代码示例假定您有一个格式为
MM-DD-YYYY hh:mm:ss.

parse函数采用日期或日期和时间字符串并将该字符串转换为对象Date

您可以在文档中的此表中查看接受的格式字符串模式

使用 moment.js 在 TypeScript 中将字符串转换为日期

您还可以使用moment包将字符串转换为 TypeScript 中的日期。

首先,确保通过从项目的根目录运行以下命令来安装模块。

# 👇️ with NPM npm install moment # 👇️ with YARN yarn add moment

现在您可以导入并使用该moment模块将字符串转换为日期对象。

索引.js
import moment from 'moment'; const str = '09-24-2024 09:44:21'; const date = moment(str, 'MM-DD-YYYY hh:mm:ss').toDate(); console.log(date); // 👉️ 2024-09-24T06:44:21.000Z

请注意,我使用该toDate()方法将moment对象转换为 JavaScript 日期。

如果您宁愿将其保留为moment对象,则可以删除该呼叫。

请注意,该moment模块通常只应在您的项目已经依赖它时使用。

一般来说,最好使用更现代的date-fns包,因为它要快得多。