2

如何将 JavaScript 日期转换为 ISO 字符串?

 4 months ago
source link: https://www.fly63.com/article/detial/12635
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

更新日期: 2024-01-11阅读: 25标签: 日期分享

扫一扫分享

如果您是一名 Web 开发人员,您必须知道如何使用 JavaScript 日期。该日期可帮助您管理网络上的事件、任务和操作。但是日期和时区可能很难处理,特别是如果您想使用 ISO 8601 这样的标准格式。如何将 JavaScript 日期转换为 ISO 字符串?

您可以使用 toISOString() 方法,该方法是 JavaScript 中 Date 对象的一部分。它为您提供一个以 ISO 8601 格式显示日期的字符串,如下所示:YYYY-MM-DDTHH:mm:ss.sssZ。T 分隔日期和时间,Z 表示时间采用 UTC(协调世界时)。

但是,如果您想更改 ISO 字符串,例如删除秒或更改时区,该怎么办?然后你需要做更多的工作,我将在本指南中向你展示。 

在本文中,我们将探讨:

  • 如何将日期转换为 ISO 格式字符串
  • 如何处理时区
  • 使用当前日期
  • 从 ISO 字符串中排除时区
  • 将 ISO 日期字符串转换为本地时间
  • 如何格式化 ISO 日期字符串
  • 将 ISO 日期字符串转换为特定格式
  • 如何处理时区偏移
  • 将 ISO 日期字符串解析为日期对象

让我们来探索一下。

将 JavaScript 日期转换为 ISO 字符串

在 JavaScript 中处理日期时,您通常需要以 ISO 8601 等标准化格式表示它们。ISO 字符串格式可确保不同系统之间的一致性和兼容性。JavaScript 提供了一个名为 的内置方法toISOString()来毫不费力地实现这种转换。

方法 1. 使用 toISOString() 方法

该toISOString()方法可用于 JavaScript Date 对象,并返回 ISO 8601 格式的日期字符串表示形式。

以下是如何在 JavaScript 中将新日期转换为 ISO 格式的示例:

const currentDate = new Date();
const isoString = currentDate.toISOString();
console.log(isoString);
// Output: 2023-08-18T02:57:08.020Z
659fb5436f35f.jpg

在此代码中,currentDate使用当前日期和时间创建对象。toISOString()然后对该对象调用该方法,生成以下格式的 ISO 字符串:YYYY-MM-DDTHH:mm:ss.sssZ。

方法2:使用JSON.stringify()日期转iso字符串

该JSON.stringify()方法是将日期对象转换为 ISO 字符串的另一种方法。它返回一个与该方法格式相同的字符串toISOString(),但用双引号引起来。例如:
let date = new Date();
console.log(JSON.stringify(date));
// Output: "2024-01-04T03:38:48.891Z"

方法3:Intl.DateTimeFormat()方法

该Intl.DateTimeFormat()对象是将日期对象转换为 ISO 字符串的更高级、更强大的方法。它返回一个根据给定locale、options和自定义格式的字符串time zone。例如:

let date = new Date();
let options = {
  dateStyle: 'short',
  timeStyle: 'long',
  timeZone: 'Asia/Kolkata'
}

let formatter = new Intl.DateTimeFormat('sv-SE', options);
console.log(formatter.format(date));
// 2024-01-04 09:22:41 GMT+5:30

此方法不会返回时间组件的确切 ISO 格式字符串。此外,日期格式可能会根据区域设置而有所不同。

659fb55c6058e.jpg

如果我们之前讨论的方法不适合您的情况,则自定义函数可以作为解决方案。这是一个如何编写的示例。

4.自定义ISO字符串转换

虽然toISOString()提供了标准的 ISO 字符串格式,但有时您可能需要不同的格式。在这种情况下,您可以手动构建类似 ISO 的字符串表示形式:

function customToISOString(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');

  return `${year}-${month}-${day}`;
}

const currentDate = new Date();
const customIsoString = customToISOString(currentDate);
console.log(customIsoString);
// Output: 2023-08-18
在此示例中,该customToISOString()函数提取日期的year、month和day组成部分,以创建格式为 的自定义类 ISO 字符串YYYY-MM-DD。

将 JavaScript ISO 字符串转换为日期

在处理日期时,处理时区至关重要,因为不同的用户和系统可能位于不同的时区。将 ISO 日期字符串转换为用户或系统的本地时间需要正确处理时区。

在此代码中,ISO 日期字符串首先转换为JavaScript Date对象。然后,该toLocaleString()方法用于根据用户或系统的时区将日期转换为本地日期和时间表示形式。

const isoDateString = "2023-08-17T12:00:00.000Z";
const date = new Date(isoDateString);
const localDateString = date.toLocaleString();
console.log(localDateString);
// Output: 8/17/2023, 5:30:00 PM

将时区信息添加到 ISO 字符串

要在 ISO 字符串中包含时区信息,可以使用该toISOString()方法。以下是创建带有时区的 ISO 字符串的方法:

const currentDate = new Date();
const isoWithTimezone = currentDate.toISOString();
console.log(isoWithTimezone);
// Output: 2023-08-18T02:59:34.205Z

生成的 ISO 字符串将包含时区信息:YYYY-MM-DDTHH:mm:ss.sssZ。

在 JavaScript 中将当前日期转换为 ISO 字符串

当您需要为事件或数据添加时间戳时,将当前日期转换为 ISO 字符串是一项常见任务。

const currentDate = new Date();
const isoString = currentDate.toISOString();
console.log(isoString);
// Output: 2023-08-18T03:00:23.917Z

该代码片段创建一个Date表示当前日期和时间的对象,然后使用该toISOString()方法将其转换为 ISO 字符串。

生成的 ISO 字符串将包含日期和时间部分。

从 ISO 字符串中排除时区

创建不带时区的 ISO 字符串

在某些情况下,您可能需要不带时区信息的 ISO 字符串。以下是实现这一目标的方法:

const currentDate = new Date();
const isoWithoutTimezone = currentDate.toISOString().slice(0, 19);
console.log(isoWithoutTimezone);
// Output: 2023-08-18T03:02:53

该toISOString()方法提供完整的 ISO 字符串,但使用JavaScript slice()仅提取日期和时间部分,而不提取时区信息。

日期转 ISO 字符串(不含时间)

要创建不带时间部分的 ISO 日期字符串,可以修改代码如下:

const currentDate = new Date();
const isoDateOnly = currentDate.toISOString().split('T')[0];
console.log(isoDateOnly);
// Output: 2023-08-18
659fb56ed4dd5.jpg

通过在“T”字符处拆分 ISO 字符串并获取第一部分,您将获得不带时间的 ISO 日期。

此代码将为您提供 格式为 YYYY-MM-DD 的 ISO 日期字符串。

将 ISO 字符串转换为 JavaScript 日期

可以使用 来将 ISO 日期字符串转换为特定时区的本地时间toLocaleString()。以下是如何在 JavaScript 中将 ISO 字符串转换为日期的示例:

const isoDateString = "2023-08-18T12:00:00.000Z";
const date = new Date(isoDateString);

const options = { timeZone: 'America/New_York' };
const localDateString = date.toLocaleString('en-US', options);
console.log(localDateString);
// Output: 8/18/2023, 8:00:00 AM

在此示例中,选项对象指定目标时区。该toLocaleString()方法与 time zone 选项一起使用,将 ISO 日期字符串转换为指定时区的本地时间。

格式化 ISO 日期字符串

JavaScript 的 Date 对象不提供内置格式化选项,但您可以创建一个函数来根据需要格式化 ISO 日期字符串:

function formatISODate(isoDateString, format) {
  const date = new Date(isoDateString);
  const options = {
    year: 'numeric',
    month: 'short',
    day: 'numeric'
  };

  return new Intl.DateTimeFormat('en-US', options).format(date);
}

const isoDateString = "2023-08-18T12:00:00.000Z";
const formattedDate = formatISODate(isoDateString);

console.log(formattedDate);
// Output: Aug 18, 2023

在此代码中,该formatISODate()函数采用 ISO 日期字符串和格式字符串作为参数。然后,它将 ISO 日期字符串转换为 Date 对象,并使用该Intl.DateTimeFormat对象根据提供的格式设置日期格式。

不带秒和毫秒的 ISO 字符串

如果需要不带秒和毫秒的ISO字符串,可以修改toISOString()结果:

const currentDate = new Date();
const isoStringWithoutSeconds = currentDate.toISOString().slice(0, 16) + 'Z';
console.log(isoStringWithoutSeconds);
// Output: 2023-08-18T03:08Z

通过使用该slice (0, 16)方法,您可以删除秒和毫秒,然后添加“Z”来指示UTC时区。

将 ISO 日期字符串转换为本地日期

要将 ISO 日期字符串转换为本地Date对象,同时考虑时区:

function convertISOToLocalDate(isoDateString) {
  const date = new Date(isoDateString);
  const utcMilliseconds = date.getTime();
  const offset = date.getTimezoneOffset() * 60 * 1000;

  return new Date(utcMilliseconds + offset);
}

const isoDateString = "2023-08-18T12:00:00.000Z";
const localDate = convertISOToLocalDate(isoDateString);
console.log(localDate);
// Output: Fri Aug 18 2023 12:00:00 GMT+0530 (India Standard Time)

此函数根据 ISO 日期字符串计算 UTC 毫秒,添加时区偏移量(以毫秒为单位),并返回本地 Date 对象。

将 ISO 日期字符串转换为特定格式

如果需要将 ISO 日期字符串转换为特定格式,可以使用字符串操作和 Date 对象来实现:

function convertISOToSpecificFormat(isoDateString, format) {
  const date = new Date(isoDateString);

  const day = String(date.getDate()).padStart(2, '0');
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const year = date.getFullYear();

  return format
    .replace('dd', day)
    .replace('mm', month)
    .replace('yyyy', year);
}

const isoDateString = "2023-08-18T12:00:00.000Z";
const formattedDate = convertISOToSpecificFormat(isoDateString, 'dd/mm/yyyy');
console.log(formattedDate);
// Output: 18/08/2023

在此示例中,该convertISOToSpecificFormat()函数采用 ISO 日期字符串和格式字符串作为参数。格式字符串将替换为 Date 对象中相应的日、月和年值。

处理时区偏移

要将 ISO 日期字符串转换为本地 Date 对象,同时考虑时区偏移:

function convertISOToOffsetLocalDate(isoDateString, offsetMinutes) {
  const date = new Date(isoDateString);
  const utcMilliseconds = date.getTime();
  const offsetMilliseconds = offsetMinutes * 60 * 1000;

  return new Date(utcMilliseconds + offsetMilliseconds);
}

const isoDateString = "2023-08-18T12:00:00.000Z";
const localDate = convertISOToOffsetLocalDate(isoDateString, -240);
console.log(localDate);
// Output: Fri Aug 18 2023 13:30:00 GMT+0530 (India Standard Time)

在此代码中,该convertISOToOffsetLocalDate()函数接受 ISO 日期字符串和以分钟为单位的偏移量。然后,它通过将偏移量添加到 UTC 毫秒来计算本地日期。

带有时区偏移量的 ISO 日期字符串

要在 ISO 日期字符串中包含时区偏移量:

function getISOWithTimezoneOffset(date) {
  const offsetMinutes = date.getTimezoneOffset();
  const offsetHours = -Math.floor(offsetMinutes / 60);
  const offsetMinutesRemainder = Math.abs(offsetMinutes) % 60;
  const timezoneOffset = 
    `${offsetHours.toString().padStart(2, '0')}:${offsetMinutesRemainder.toString().padStart(2, '0')}`;

  return `${date.toISOString().slice(0, 19)}${timezoneOffset}`;
}

const currentDate = new Date();
const isoWithOffset = getISOWithTimezoneOffset(currentDate);
console.log(isoWithOffset);
// Output: 2023-08-18T03:15:2506:30

在此代码中,该getISOWithTimezoneOffset()函数计算时区偏移量(以小时和分钟为单位)并将其附加到 ISO 字符串。

将 ISO 日期字符串转换为本地时区

要将 ISO 日期字符串转换为用户设备的本地时区:

function convertISOToLocalTimezone(isoDateString) {
  const date = new Date(isoDateString);
  const localDate = new Date(date.getTime() + (date.getTimezoneOffset() * 60 * 1000));

  return localDate;
}

const isoDateString = "2023-08-18T12:00:00.000Z";
const localDate = convertISOToLocalTimezone(isoDateString);
console.log(localDate);
// Output: Fri Aug 18 2023 12:00:00 GMT+0530 (India Standard Time)

在此示例中,该convertISOToLocalTimezone()函数通过将时区偏移量与 UTC 毫秒相加来计算本地时间。

使用 moment.js 库

Moment.js是一个流行的 JavaScript 库,可以简化日期和时间操作。如果您更喜欢使用库来完成此类任务,Moment.js提供了一种使用 ISO 日期字符串的简单方法:

const isoDateString = "2023-08-17T12:00:00.000Z";
const formattedDate = moment(isoDateString).format('MMMM Do YYYY, h:mm:ss a');

console.log(formattedDate);

在此示例中,Moment.js 库用于解析 ISO 日期字符串,然后使用所需的模式对其进行格式化。

处理带有本地时区的 ISO 日期字符串

要将 ISO 日期字符串转换为具有用户本地时区的本地日期和时间:

const isoDateString = "2023-08-18T12:00:00.000Z";
const localDate = new Date(isoDateString);
console.log(localDate.toLocaleString());
// Output: 8/18/2023, 5:30:00 PM

在此代码中,该方法直接在JavaScript Date 构造toLocaleString()函数对象上使用,该对象负责使用用户的本地时区将 ISO 日期字符串转换为本地日期和时间表示形式。

将 ISO 日期字符串转换为特定格式和时区

要将 ISO 日期字符串转换为特定格式并将其调整为特定时区:

function formatDateTime(date, format, timeZone) {
  const options = {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    timeZone: timeZone,
    timeZoneName: 'short'
  };

  const formatter = new Intl.DateTimeFormat('en-US', options);
  const parts = formatter.formatToParts(date);

  const formattedDate = format.replace(/(yyyy|MM|dd|HH|mm|ss|zzz)/g, match => {
    switch (match) {
      case 'yyyy': return parts.find(part => part.type === 'year').value;
      case 'MM': return parts.find(part => part.type === 'month').value;
      case 'dd': return parts.find(part => part.type === 'day').value;
      case 'HH': return parts.find(part => part.type === 'hour').value;
      case 'mm': return parts.find(part => part.type === 'minute').value;
      case 'ss': return parts.find(part => part.type === 'second').value;
      case 'zzz': return parts.find(part => part.type === 'timeZoneName').value;
      default: return match;
    }
  });

  return formattedDate;
}
如何使用这个方法呢?以下是如何使用此自定义方法的示例formatDateTime():
// Example usage:
const isoDateString = '2022-01-04T12:30:00Z';
const targetTimeZone = 'America/New_York';

// Your desired format string
const targetFormat = 'yyyy-MM-dd HH:mm:ss zzz';

const date = new Date(isoDateString);
const result = formatDateTime(date, targetFormat, targetTimeZone);

console.log(result);
// Output: 2022-01-04 07:30:00 EST

在此示例中,该formatDateTime()函数采用 ISO 日期字符串、目标格式字符串和目标时区。它根据提供的格式和时区转换和格式化日期。

将 ISO 日期字符串解析为日期对象

要解析 ISO 日期字符串并将其转换为 JavaScript Date 对象:

const isoDateString = "2023-08-18T12:00:00.000Z";
const dateObject = new Date(isoDateString);
console.log(dateObject);
// Output: Fri Aug 18 2023 17:30:00 GMT+0530 (India Standard Time)

在此代码中,只需使用 ISO 日期字符串作为参数创建一个新的 Date 对象,就会自动将其转换为 JavaScript Date 对象。

经常问的问题

如何在 JavaScript 中将日期字符串转换为 ISO 格式?
如何在 JavaScript 中将时间戳转换为 ISO 日期?
如何将 ISO 日期字符串转换为带有本地时间的 JavaScript Date 对象?

在本文中,您学习了如何使用 JavaScript Date 对象来创建和操作 ISO 字符串。ISO 字符串是以人类可读的格式表示日期和时间的标准化方式。每种方法都有其自身的优点和缺点,您应该选择适合您的需求和目标的方法。以下是一些可以帮助您做出决定的提示:

  • 如果您需要一种简单且一致的方法将日期对象转换为 ISO 字符串,请使用该toISOString()方法。
  • 如果需要将日期对象序列化为 JSON 格式,请使用该JSON.stringify()方法。
  • 如果您需要一种灵活且用户友好的方式将日期对象转换为 ISO 字符串,请使用该Intl.DateTimeFormat()对象。
  • 如果没有任何东西适合您的需要,您可以编写自定义函数。

通过使用 ISO 字符串,您可以确保日期和时间在不同平台和应用程序中保持一致且准确。

翻译来自:https://www.rajamsr.com/javascript-date-iso-string/

链接: https://www.fly63.com/article/detial/12635


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK