角材料datepicker dateformat

时间:2018-09-28 03:58:55

标签: angular datepicker angular-material

我试图从datepicker获取日期并将其保存在sql server中,但是输出像'1538107200000'一样。它是什么格式,以及如何将其转换为与sql server日期格式兼容的日期格式。

在component.html

<input matInput [matDatepicker]="picker" placeholder="enter date"
           (dateInput)="addEvent('input', $event)">
    <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
    <mat-datepicker #picker></mat-datepicker>

在component.ts

addEvent(type: string, dinput: MatDatepickerInputEvent<Date>) {
    this.dinput.push(`${dinput.value}`);
    this.date = new Date(this.dinput[0].toString());
    this.dates = moment(this.date, 'YYYY-MM-DD').toString();
    console.log(this.dates);
  }

这给出了无效日期的错误。如何解决?请帮忙。

4 个答案:

答案 0 :(得分:0)

距epoc数秒,请参阅here。我相信您没有正确使用矩型构造函数。试试这个:

moment(this.date).format('YYYY-MM-DD').toString();

您传递给moment构造函数的值或该值的格式都是moment无法识别的。参见documentation

答案 1 :(得分:0)

您正在以json格式获取日期。下面是一个自定义过滤器,用于将json日期格式转换为真实日期。

.filter("filterdate", function() {
var re = /\/Date\(([0-9]*)\)\//;
return function(x) {
    var m = x.match(re);
    if( m ) return new Date(parseInt(m[1]));
    else return null;
};
});

之后,在 component.html

中添加以下过滤器
<input {{dateInput| filterdate | date:'dd/MM/yyyy'}}>

答案 2 :(得分:0)

1538107200000是以毫秒为单位的日期(纪元时间戳)。要将其转换为日期对象,请使用new Date(1538107200000)。 要以所需格式获取日期,请使用moment(new Date(1538107200000)).format("YYYY-MM-DD")。这将为您提供YYYY-MM-DD格式的日期。现在,您需要将其保存在SQL Server中。这将以字符串形式进入您的服务器,您需要查找服务器支持的日期格式,并将该字符串转换为日期并保存到数据库。

答案 3 :(得分:0)

您也可以使用 DatePipe。试试这个:

第一步,在 app.module.ts 文件中注入 DatePipe Provider:

import { DatePipe } from '@angular/common';

@NgModule({
    ...
    providers: [
        [DatePipe]
    ],
   ...
})

并将您的数据转换为所需的格式:

import { DatePipe } from '@angular/common';

constructor(private datePipe: DatePipe) {}
    
this.datePipe.transform(this.myFormControl.value,'yyyy-MM-dd');

更多格式,请关注 DatePicker documentation