Material2日期选择器:去除时间信息将日期转为时间戳
回答
1. 无需Moment.js:原生JS就能完成ISO字符串到时间戳的转换
针对生日场景(无需时区信息,只关注日期本身),可以用以下两种原生方式处理:
方式一:直接转换ISO字符串为UTC时间戳
如果接受ISO字符串对应的UTC时间戳,直接用Date对象的getTime()方法即可:
const isoString = "2018-05-01T22:00:00.000Z"; const timestamp = new Date(isoString).getTime(); // 输出:1525183200000(对应UTC时间2018-05-01 22:00:00)
方式二:生成本地时区的生日日期时间戳(更贴合生日场景)
如果希望时间戳对应本地时区中该日期的0点(毕竟生日按本地日期计算更合理),可以先提取ISO字符串的日期部分,再构造本地日期:
const isoString = "2018-05-01T22:00:00.000Z"; const datePart = isoString.split('T')[0]; // 提取"2018-05-01" const localBirthdayDate = new Date(datePart); const localTimestamp = localBirthdayDate.getTime(); // 输出:本地时区2018-05-01 00:00:00对应的时间戳
2. Material2日期选择器可以直接获取时间戳(不必先转ISO字符串)
Material DatePicker默认返回的是Date对象,而非ISO字符串——你拿到ISO字符串大概率是表单控件的默认值转换导致的。直接获取选中的Date对象,再调用getTime()就能得到时间戳,这是最简洁的方式:
示例代码(Angular组件中)
import { Component } from '@angular/core'; import { FormControl } from '@angular/forms'; @Component({ selector: 'birthday-picker-example', template: ` <mat-form-field appearance="fill"> <mat-label>选择生日</mat-label> <input matInput [matDatepicker]="picker" [formControl]="birthdayControl"> <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle> <mat-datepicker #picker></mat-datepicker> </mat-form-field> <p>生日时间戳:{{ getBirthdayTimestamp() }}</p> `, }) export class BirthdayPickerExample { birthdayControl = new FormControl(); getBirthdayTimestamp() { const selectedDate = this.birthdayControl.value; if (selectedDate instanceof Date) { // 生成本地时区生日当天0点的时间戳 return new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()).getTime(); } return null; } }
如果确实需要让DatePicker直接返回时间戳,也可以通过自定义DateAdapter或表单控件值转换器实现,但上述直接使用Date对象的方式已经足够简便,无需额外配置。
内容的提问来源于stack exchange,提问作者Budi
相关产品推荐
相关产品推荐

