Angular 2 - 日期选择器显示 mm/dd/yyyy 而不是对象日期

Posted

技术标签:

【中文标题】Angular 2 - 日期选择器显示 mm/dd/yyyy 而不是对象日期【英文标题】:Angular 2 - datepicker shows mm/dd/yyyy instead of object date 【发布时间】:2017-05-07 01:44:01 【问题描述】:

我使用 Angular 2 中的简单日期选择器,如下所示;

<div class="form-group row">
    <label for="hourdate-field" class="col-md-4  col-form-label text-md-right">Date</label>
    <div class="col-md-7 ">
        <input type="date" formControlName="hourdate" class="form-control">
    </div>
</div>

日期选择器在选择并保存日期后可以正常工作,但在选择要编辑的现有对象时,会显示占位符 mm/dd/yyyy 而不是对象日期。

关于如何显示对象的日期值而不是占位符的任何想法?

根据表单 init 下方的请求;

initForm() 
    let hour_id = 0; 
    let customer_id = 0;
    let payer_id = 0;
    let project = '';
    let description = '';
    let hours = '';
    let hourdate = new Date('01-01-1900');

    if (this.selected === true)  //edit existing
        hour_id = this.selectedHour.hour_id;
        customer_id = this.selectedHour.customer_id;
        payer_id = this.selectedHour.payer_id;
        project = this.selectedHour.project;
        description = this.selectedHour.description;
        hours = this.selectedHour.hours;
        hourdate = this.selectedHour.hourdate;   
    

    //create the form
    this.hourForm = this.formBuilder.group(
        hour_id:[hour_id],
        customer_id: [customer_id],
        payer_id: [payer_id],
        project: [project],
        description: [description],
        hours: [hours],
        hourdate: [hourdate]
    );

使用字符串而不是日期为我指明了正确的方向

变化:

let hourdate = '1900-01-01'; 
hourdate = this.datepipe.transform(this.selectedHour.hourdate, 'yyyy-MM-dd'); 

【问题讨论】:

你是如何初始化表单控件的? 我编辑了问题 【参考方案1】:

表单控件的值只是格式为 YYYY-MM-dd 的文本字符串,而不是实际日期。因此,我们可以通过以下操作正确初始化:

initForm() 
    <...>
    let hourdate = '1900-01-01';

    //create the form
    this.hourForm = this.formBuilder.group(
        <...>
        hourdate: [hourdate]
    );

如果有需要绑定的模型,我们可以订阅valueChanges 属性,其形式为:

this.hourForm.controls['hourdate'].valueChanges.subscribe(value => [myModelProperty] = new Date(value));

Plunker

【讨论】:

【参考方案2】:

要初始化日期,您应该以正确的格式(字符串,而不是日期对象)传递它,请参阅https://***.com/a/14212715/1990451。

为了解决您的问题,只需将 hourdate 分配更改为以下内容:

let hourdate = '1900-01-01';

【讨论】:

以上是关于Angular 2 - 日期选择器显示 mm/dd/yyyy 而不是对象日期的主要内容,如果未能解决你的问题,请参考以下文章

Datepicker 不显示日期格式 MM/DD/YYYY 角度 4

角反应形式材料日期选择器手动输入格式DD/MM/YYYY

JavaFX 8 日期选择器功能

Jquery datepicker:验证日期 mm/dd/yyyy

从 DatePicker 以 yyyy/MM/dd 格式获取日期

PowerBI - 将 DatePicker 切片器中的日期格式设置为 dd/mm/yyyy