如果您是一名 Web 开发人员,您必须知道如何使用 JavaScript 日期。该日期可帮助您管理网络上的事件、任务和操作。但是日期和时区可能很难处理,特别是如果您想使用 ISO 8601 这样的标准格式。如何将 JavaScript 日期转换为 ISO 字符串?
您可以使用 toISOString() 方法,该方法是 JavaScript 中 Date 对象的一部分。它为您提供一个以 ISO 8601 格式显示日期的字符串,如下所示:YYYY-MM-DDTHH:mm:ss.sssZ。T 分隔日期和时间,Z 表示时间采用 UTC(协调世界时)。
但是,如果您想更改 ISO 字符串,例如删除秒或更改时区,该怎么办?然后你需要做更多的工作,我将在本指南中向你展示。
在本文中,我们将探讨:
让我们来探索一下。
在 JavaScript 中处理日期时,您通常需要以 ISO 8601 等标准化格式表示它们。ISO 字符串格式可确保不同系统之间的一致性和兼容性。JavaScript 提供了一个名为 的内置方法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
在此代码中,currentDate使用当前日期和时间创建对象。toISOString()然后对该对象调用该方法,生成以下格式的 ISO 字符串:YYYY-MM-DDTHH:mm:ss.sssZ。
let date = new Date();
console.log(JSON.stringify(date));
// Output: "2024-01-04T03:38:48.891Z"
该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 格式字符串。此外,日期格式可能会根据区域设置而有所不同。
如果我们之前讨论的方法不适合您的情况,则自定义函数可以作为解决方案。这是一个如何编写的示例。
虽然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
在处理日期时,处理时区至关重要,因为不同的用户和系统可能位于不同的时区。将 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 字符串中包含时区信息,可以使用该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。
当您需要为事件或数据添加时间戳时,将当前日期转换为 ISO 字符串是一项常见任务。
const currentDate = new Date();
const isoString = currentDate.toISOString();
console.log(isoString);
// Output: 2023-08-18T03:00:23.917Z
该代码片段创建一个Date表示当前日期和时间的对象,然后使用该toISOString()方法将其转换为 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 日期字符串,可以修改代码如下:
const currentDate = new Date();
const isoDateOnly = currentDate.toISOString().split('T')[0];
console.log(isoDateOnly);
// Output: 2023-08-18
通过在“T”字符处拆分 ISO 字符串并获取第一部分,您将获得不带时间的 ISO 日期。
此代码将为您提供 格式为 YYYY-MM-DD 的 ISO 日期字符串。
可以使用 来将 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 日期字符串转换为指定时区的本地时间。
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字符串,可以修改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 日期字符串转换为本地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 日期字符串转换为特定格式,可以使用字符串操作和 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 日期字符串中包含时区偏移量:
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 日期字符串转换为用户设备的本地时区:
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是一个流行的 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 日期字符串转换为具有用户本地时区的本地日期和时间:
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 日期字符串转换为特定格式并将其调整为特定时区:
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;
}
// 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 日期字符串并将其转换为 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 Date 对象来创建和操作 ISO 字符串。ISO 字符串是以人类可读的格式表示日期和时间的标准化方式。每种方法都有其自身的优点和缺点,您应该选择适合您的需求和目标的方法。以下是一些可以帮助您做出决定的提示:
通过使用 ISO 字符串,您可以确保日期和时间在不同平台和应用程序中保持一致且准确。
翻译来自:https://www.rajamsr.com/javascript-date-iso-string/
在日期格式化时遇到的问题,日期格式化方法在最下面。如果在中国时区 formatDate(‘2019-07-09‘) 结果是 ‘2019-07-09’,如果 在夏威夷时区 utc-10:00 或者别的时区 formatDate(‘2019-07-09‘) 结果是 ‘2019-07-08’
为了更好的讲这节的内容,提示一个 JS 处理日期的小技巧,想获取上个月最后一天,只需要设置SetDate参数为0即可。使用 JS 获取当前月的最后一天,咱们通常的思路先获取下个月的第一天
我们这里来获取今天所在星期的始末日期,我们可以通过(new Date).getDay()来获取今天是星期几,然后再通过这个减去或者加上一定的天数,就是这个星期的开始日期和结束日期。
用vue取值页面遍历时,每次都搜索js日期格式化和字符串长度截取,这次记录下来,以后从这里直接拿即可。html代码如下
javascript中的内置对象是我们经常会用到的,那么今天我们就来说说Date的四种构造方法吧,new Date()这是我们最常使用也最熟悉不过的Date对象的构造方法了,通过无参数的构造函数我们可以默认获取到一个代表实例化时的Date对象
我们这里来获取今天所在星期的始末日期,我们可以通过(new Date).getDay()来获取今天是星期几,然后再通过这个减去或者加上一定的天数,就是这个星期的开始日期和结束日期。
ElementUI是饿了么推出的一套基于vue2.x的一个ui框架。官方文档也很详细,这里做一个element-ui日期插件的补充。官方文档中使用picker-options属性来限制可选择的日期,这里举例子稍做补充。
js获取指定时间范围内指定间隔天数的所有日期,前端js,已知开始时间a、结束时间b和间隔天数c,要求取在a-b这两个时间范围内、间隔c天的所有日期。
虽然现在处理日期方面已经有了很成熟的也很好用的库,例如(momentjs和date-fns),但是在实际开发中,我们有时候可能并不需要整个库。所以我就在下面整理了在前端开发时对日期时间的各种操作,也算是比较全的了
今天发现一个奇怪的问题,在iPhone使用 safari 选择定时发布文章到OSC,选择时间后提示不是合法的时间,判断时间的代码如下:在Chrome下会输出 pass,在Safari会输出 isNaN,根据 ECMAScript 5 ISO-8601 format support: 的说法
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!