Typescript 解析UTC日期会产生不同的时间
我正在做一个日期分析器Typescript 解析UTC日期会产生不同的时间,typescript,date,validation,parsing,Typescript,Date,Validation,Parsing,我正在做一个日期分析器 const parseDate = (data: any): Date => { const isDate = (d: Date) => !isNaN(d.getDate()); if ( Object.prototype.toString.call(data) === '[object Date]' && isDate(data) ) return data else if
const parseDate = (data: any): Date => {
const isDate = (d: Date) => !isNaN(d.getDate());
if (
Object.prototype.toString.call(data) === '[object Date]' &&
isDate(data)
)
return data
else if (typeof data === 'string') {
const date = new Date(data);
if (isDate(date)) return date;
else return `Not a date`
} else return `Not a date`
}
在这个简化版本中,它检查是日期并返回它,还是返回错误字符串
但是,它无法在UTC上正确解析:
const oddDate = new Date("1970-01-01T00:00:00.001Z").toUTCString()
const result = parseDate(oddDate)
expect(oddDate).toEqual(result)
Jest给出了错误:
Expected: 1970-01-01T00:00:00.001Z
Received: 1970-01-01T00:00:00.000Z
看来
new Date("1970-01-01T00:00:00.001Z") !== new Date(new Date("1970-01-01T00:00:00.001Z").toUTCString())
我应该如何正确解析UTC时间 在oddDate调用.toutString函数时,将丢失精度 请注意oddDateStr上缺少的毫秒,而它们仍然存在于oddDateIso上,如下所示: 更新toISOString不会丢失精度:
根据使用的字符串格式,确实会丢失精度,即Www,dd-Mmm-yyy-hh:mm:ss-GMT.日期原型上没有ToutTime函数…@HereticsMonkey fixed,应该是ToutString-does。ToutString提供毫秒分辨率?我想没有办法在不丢失精度的情况下进行解析?@Marc Define parse。当您执行new DatesomeString或Date.parsesomeString时,您将在此时解析它。在这里精度并没有损失。在调用ToutString时,精度已丢失。您可以使用一些将值格式化为UTC的函数,但会强制使用毫秒后缀Thu,1970年1月1日00.00.00.000 GMT。@Marc请参阅我的更新,该更新显示toISOString不会导致精度损失。