【问题标题】:ion-datetime bind to epoch离子日期时间绑定到纪元
【发布时间】:2018-05-10 10:05:58
【问题描述】:

我有一个模型,它要求日期/时间为 Unix 纪元格式的毫秒。我曾尝试使用 Moment 界面 Date |数字作为类型,我似乎无法正确理解。

我希望控件以人类可读的格式显示,选择器也一样,但我希望数据绑定模型是数字的。我不能使用管道(“动作表达式中不能有管道”)。我应该删除双向数据绑定,转换 changeModel 函数中的值并使用类似函数填充 person.date_of_birth 吗?

.html

<ion-datetime displayFormat="MMM DD, YYYY" pickerFormat="MMM DD, YYYY" (ngModelChange)="changeModel($event)" [(ngModel)]="person.date_of_birth"></ion-datetime>

.ts:

let person={name: string, date_of_birth: numeric};

模型被写入移动设备上的本地数据库(pouchdb/sqlite),然后通过 nodejs REST API 与 mongodb 数据库同步。它只显示在这个 html 页面上,所以我真的希望它在其他任何地方都是数字。

【问题讨论】:

    标签: angular ionic-framework momentjs angular2-databinding


    【解决方案1】:

    作为ion-datetime 的输入,您可以使用public yourDate: string = new Date().toISOString();。所以这是您要绑定到 ion-datetime 的值。

    如果你想要其他格式,你可以这样做new Date(yourDate).getTime()。如果你有这个ISOString,你总是可以把它解析回Date对象。

    更新

    使用管道和格式函数。

    这里我们有一个单向数据绑定,它使用我的自定义date 管道,将数字日期格式化为ISOString(ngModelChange) 事件是“其他方式”绑定,即为date_of_birth 分配一个数值(格式是自定义函数)。

    page.html

    <ion-datetime displayFormat="MMM DD, YYYY" 
        (ngModelChange)="date_of_birth=format($event)" 
        [ngModel]="date_of_birth | date"></ion-datetime> 
    

    date.pipe.ts

    import { Pipe, PipeTransform } from '@angular/core';
    
    @Pipe({
      name: 'date'
    })
    export class DatePipe implements PipeTransform {
    
      transform(value: any, args?: any): any {
        return new Date(value).toISOString();
      }
    
    }
    

    page.ts

    date_of_birth: number = new Date().getTime();
    
    format(val) {
      return new Date(val).getTime();
    }
    

    工作StackBlitz

    【讨论】:

    • 这是我试图避免的。我在父对象中嵌入了一组人员对象;每个都有 dob 值。这样做意味着填充与模型不同的本地数据类型并单独处理每个更改。这否定了具有双向绑定的价值。所以要么我有一个 htmlPerson 类型将日期存储为字符串并绑定到它(在 db 写入之前转换),要么我有一个日期数组作为字符串并将该参数与模型同步。无论哪种方式都是丑陋的。如果 ion-datetime 可以读取/写入纪元时间并遵循 displayFormat 进行演示,将会很有帮助。
    • 好的,你也可以使用管道。我将编辑我的答案!
    • 请做。我无法让管道正常工作。
    • 对于您的问题,这应该是一个通用的解决方案。
    • 啊,一种方式绑定允许管道,这是有道理的。我已经重命名了日期管道,因为该名称已经有一个标准的角度管道。我使用了 moment 而不是 Date 对象。除此之外,这很好用。感谢您的宝贵时间。
    猜你喜欢
    • 2023-03-27
    • 2019-02-04
    • 1970-01-01
    • 2017-04-12
    • 2016-11-02
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多