如何在角度修复InvalidPipeArgument

时间:2019-10-17 06:39:26

标签: javascript angular

如何修复Error: InvalidPipeArgument: 'Unable to convert "2019-10-17 09:00:00" into a date' for pipe 'DatePipe'。此错误来自Safari浏览器。

这是代码

list.component.html

 <div class="date-text" nz-col nzSpan="24">
          {{ dayWeather.date | date: 'EEEE' }}
        </div>

list.component.ts

this.weatherService
        .fiveDayForecast(this.lat, this.lon, unit)
        .subscribe(data => {
          for (let i = 0; i < data.list.length; i = i + 8) {
            const forecastWeather = new Forecast(
              data.city.name,
              data.list[i].weather[0].description,
              data.list[i].main.temp.toFixed(2)+scaleTemp,
              data.list[i].dt_txt,
              data.list[i].weather[0].icon
            );
            this.forecast.push(forecastWeather);
          }

          return this.forecast;
        });

2 个答案:

答案 0 :(得分:1)

在将日期发送到DatePipe之前,先对其进行如下转换。 Safari,不支持这种日期格式:“ 2014-02-18 15:00:48”,您应将空格更改为T。

'2014-02-18 15:00:48'.replace(/\s/, 'T')

 <div class="date-text" nz-col nzSpan="24">
    {{ validDateFormat(dayWeather.date) | date: 'EEEE' }}
 </div>

在component.ts中,创建一个将空间转换为T的方法,如下所示:

validDateFormat(dateString) {
  if(dateString) {
    return dateString.replace(/\s/, 'T');
  }

  return null;

}

答案 1 :(得分:0)

您需要将dayWeather.date转换为Date对象:新的Date(dayWeather.date)。

stackblitz simple example

来自Angular docs on Date pipe

格式示例 这些示例将日期转换为各种格式, 假设dateObj是JavaScript日期对象,用于年份:2015,月份:6,日期:15,小时:21,分钟:43,秒:11,以美国当地时间为准区域设置。

{{ dateObj | date }}               // output is 'Jun 15, 2015'
{{ dateObj | date:'medium' }}      // output is 'Jun 15, 2015, 9:43:11 PM'
{{ dateObj | date:'shortTime' }}   // output is '9:43 PM'
{{ dateObj | date:'mm:ss' }}       // output is '43:11'

来自MDN on JavaScript Date Object

var date1 = new Date('December 17, 1995 03:24:00');
// Sun Dec 17 1995 03:24:00 GMT...

var date2 = new Date('1995-12-17T03:24:00');
// Sun Dec 17 1995 03:24:00 GMT...
相关问题