2
 <td>{{suite.testSuiteAttributes && 
       suite.testSuiteAttributes.modifiedTimestamp | date: 'yyyy-MM-dd'
     }}
</td>

我想要“05-Feb-2018 11:00:00 PM CST”CST 格式的日期格式。但收到错误:

无法将“2018-01-01-12:12:12:123456”转换为管道“DatePipe”的日期

我认为这是由于 timeStamp 不是日期格式..而是从后端仅获取此日期。请建议。

4

2 回答 2

2

您的日期 "2018-01-01-12:12:12:123456" 不是有效的ISO 8601 日期,因此无法通过内置解析器解析。使用有效的日期格式或编写自定义解析器。

您可以使用正则表达式或简单地使用字符串函数,如其他答案所示的子字符串。

Javascript 中的日期将位于浏览器的本地时区,即用户的系统时间,没有本地方法可以在不同的时区创建日期。您可以使用 UTC 创建日期toLocaleString()并将其转换为特定时区。取决于从后端发送的日期是 UTC 还是 CT。如果是 CT,那么这仅适用于 CT 时区的用户。

let result = "2018-01-01-12:12:12:123456".match(/(\d{4})-(\d{2})-(\d{2})-(\d{2}):(\d{2}):(\d{2}):(\d{3})/).map(x => parseInt(x, 10));

result.shift();

console.log(new Date(...result).toLocaleString())

于 2019-03-11T09:31:34.317 回答
2

我认为您从服务器获取的日期格式错误。您需要一个有效格式的日期来转换它

因此,这是针对您的问题的解决方法,其中我编写了myDateParser()一种将无效日期转换为有效日期的方法。

你的.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';
  modifiedTimestamp;

 constructor(){

   // Passing unformatter date
   this.modifiedTimestamp = this.myDateParser('2018-01-01-12:12:12:123456');
 }

 /**
  * Custom Date parser

  */
  myDateParser(dateStr : string) : string {
    // 2018-01-01T12:12:12.123456; - converting valid date format like this

    let date = dateStr.substring(0, 10);
    let time = dateStr.substring(11, 19);
    let millisecond = dateStr.substring(20)

    let validDate = date + 'T' + time + '.' + millisecond;
    console.log(validDate)
    return validDate
  }
}

你的.component.html

  <table>
    <tr>
     <td>{{modifiedTimestamp |  date: 'yyyy-MM-dd'}}</td>
    </tr>
   </table>

stackblitz 上的解决方案

希望这会有所帮助!

于 2019-03-11T09:17:46.690 回答