在 TypeScript 中将字符串转换为日期对象
Convert a String to a Date object in TypeScript
使用Date()
构造函数将字符串转换为Date
TypeScript 中的对象。
构造函数Date()
将有效的日期字符串作为参数并返回一个Date
对象。
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()
构造函数之前正确格式化该字符串。
const str = '07_21_2024'; const date = new Date(str); console.log(date); // 👉️ Invalid Date
如果您在创建有效Date
对象时遇到困难,可以将 2 种类型的参数传递给Date()
构造函数:
- 一个有效的 ISO 8601 字符串,格式为
YYYY-MM-DDTHH:mm:ss.sssZ
, 或者只是
YYYY-MM-DD
,如果你只有一个没有时间的日期。 - 多个逗号分隔的参数,表示
year
, (0 = 一月到month
11 = 十二月)day of the month
、、、hours
和minutes
。
seconds
从日期字符串中获取日期组件
下面是一个示例,它拆分格式为MM/DD/YYYY
(可以是任何其他格式)的字符串并将值作为参数传递给Date()
构造函数以创建Date
对象。
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
我们在每个正斜杠上拆分字符串以获得月、日和年的值。
const str = '07/21/2024'; // 👇️ [ '07', '21', '2024' ] console.log(str.split('/'));
我们使用
一元加号 (+)
运算符将值转换为数字。
console.log(+'21'); // 👉️ 21 console.log(typeof +'21'); // 👉️ number
1
请注意,我们在将它传递给构造函数时从月份中减去Date()
。
const date = new Date(+year, +month - 1, +day);
Date
构造函数需要一个从零开始的值,其中 January = 0、February = 1、March = 2 等。从日期时间字符串中获取日期和时间组件
下面是另一个示例,它创建了一个Date
也包含小时、分钟和秒的对象。
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()
。
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
。
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
模块将字符串转换为日期对象。
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
包,因为它要快得多。