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不会导致精度损失。