我正在使用日期管道将日期转换为字符串。
var mydate : Date = new Date ();
在模板中有效
{{ mydate | date: "dd.MM.yyyy" }}
以及在班上
let str : string = this.dp.transform (dtm, "dd.MM.yyyy");
有没有办法做相反的事情?因此管道应解析一个字符串并获取一个日期。
答案 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');