使用DatePipe解析日期

时间:2019-10-18 13:45:01

标签: angular typescript

我正在使用日期管道将日期转换为字符串。

var mydate : Date = new Date ();

在模板中有效

{{ mydate | date: "dd.MM.yyyy" }}

以及在班上

 let str : string = this.dp.transform (dtm, "dd.MM.yyyy");

有没有办法做相反的事情?因此管道应解析一个字符串并获取一个日期。

4 个答案:

答案 0 :(得分:1)

是的!您可以创建自己的实现PipeTransform的管道。

请查看以下内容:https://ultimatecourses.com/blog/angular-pipes-custom-pipes

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'stringToDate' })
export class StringToDate implements PipeTransform {
  transform(stringDate: string) {
    // Do the conversion, Formating, substring ... here
    let newDate = new Date(stringDate);
    return newDate ;
  }
}

将此Pipe导入您的ngModule,并在模板中使用

答案 1 :(得分:1)

  

Date.parse()方法解析日期的字符串表示形式,并返回自1970年1月1日以来的毫秒数,如果该字符串无法识别,或者在某些情况下包含非法的日期值(例如2015-02-31)。

var unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
var javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');

console.log(unixTimeZero);
// expected output: 0

console.log(javaScriptRelease);
// expected output: 818035920000

Date.parse文档here

答案 2 :(得分:0)

因此,格式化和解析在本地是不可能的。 我用JavaScript RegExp来解析日期。 另一个选择是moments.js,但我没有使用它。

<input type="text" placeholder="DD.MM.YYYY" [value]="mydate | date: 'dd.MM.yyyy'" (change)="setDate ($event)"/>


setDate (e)
{
  let val : string = e.target.value;

  let rgx : RegExp = new RegExp ("^([0-9]{2})\.([0-9]{2})\.([0-9]{4})$");   // DD.MM.YYYY

  let match : Array <string>  = rgx.exec (val);
  if (match != null)
  {
    this.selday = new Date (Number (match [3]), Number (match [2]) - 1, Number (match [1]));
    this.requestData ();
  }
}

答案 3 :(得分:0)

对我而言,moment库是执行此操作的最佳且一致的替代方法,只需安装依赖项并直接使用它即可。

npm install moment

只需输入您的代码即可

import * as moment from 'moment';
...
public parse(stringDate: string, stringFormat: string, lang: string): Date {
    try {
      const dateMoment = moment(stringDate, stringFormat.toUpperCase(), lang, true);
      if (dateMoment && dateMoment.isValid()) {
        return dateMoment.toDate();
      }
      return null;
    } catch (e) {
      console.error('Error while parsing date', stringDate, e);
      return null;
    }
}

稍后您可以使用:

this.parse('2020-08-09', 'yyyy-MM-dd', 'en');