我正在将ICS转换为JSON,但是它以"20190103T073640Z"
之类的格式给我提供了日期,如何从Javascript中的此字符串中获取日期对象?
我知道“如何将ISO字符串转换为日期对象” 有很多答案,但是此字符串缺少破折号和冒号。
例如 当我添加破折号和小号时,它可以正确输出
new Date("2019-01-03T07:36:40Z");
但是如何从像这样的日期字符串中获取不带破折号和冒号"20190103T073640Z"
的javascript中的日期对象?
编辑认为重复的人-
我有ICalendar文件,我正在使用在线转换器将其转换为JSON,因此我使用的转换器以该格式给出日期,该格式不是我可以直接传递给new Date()
的格式来获取日期反对。那么有没有什么方法可以像这样解析“ 20190103T073640Z”字符串。
谢谢。
答案 0 :(得分:1)
仅提取每个日期组件并使用常规构造函数创建一个新的Date对象该怎么办?
function parseIcsDate(icsDate) {
if (!/^[0-9]{8}T[0-9]{6}Z$/.test(icsDate))
throw new Error("ICS Date is wrongly formatted: " + icsDate);
var year = icsDate.substr(0, 4);
var month = icsDate.substr(4, 2);
var day = icsDate.substr(6, 2);
var hour = icsDate.substr(9, 2);
var minute = icsDate.substr(11, 2);
var second = icsDate.substr(13, 2);
return new Date(Date.UTC(year, month - 1, day, hour, minute, second));
}
var date = parseIcsDate("20190103T073640Z");
console.log(date);
答案 1 :(得分:0)
如果有理由使用图书馆(如果使用其他日期运算),那么Luxon是一个很好的选择: https://moment.github.io/luxon/
import { DateTime } from 'luxon';
// Creates a DateTime instance from an ISO 8601-compliant string
const date = DateTime.fromISO('2019-01-03T07:36:40Z');
// Format date to ISO 8601 string
// -> '2019-01-03T08:36:40.000+01:00'
date.toISO();
// Set format to 'basic'
// -> '20190103T083640.000+0100'
date.toISO({format: 'basic'});
// We don't need milliseconds
// -> '20190103T083640+0100'
date.toISO({format: 'basic', suppressMilliseconds: true});
// My system uses a time zone with an offset of +01:00, which is used by Luxon as default.
// So I have to convert the date to UTC (offset +00:00).
// -> '20190103T073640Z'
date.toUTC(0).toISO({format: 'basic', suppressMilliseconds: true});
// As an one-liner
DateTime
.fromISO('2019-01-03T07:36:40Z')
.toUTC(0)
.toISO({ format: 'basic', suppressMilliseconds: true })