Angular接收REST API日期格式变时间戳,如何保留原格式?
保留REST API返回的原始日期格式解决方案
这个问题我之前开发Angular项目时也踩过坑!本质原因是Angular的HttpClient默认会自动识别JSON里的日期格式字符串,把它转换成Date对象,而当你直接访问这个对象的值时,它就会返回对应的时间戳数值(也就是你看到的大数字1526555305203)。要保留后端返回的原始日期字符串格式,这里有几个可行的方案:
方案一:前后端约定字段类型(最推荐)
直接在Angular的接口定义里,把日期对应的字段类型声明为string,而不是Date,同时确保后端返回的日期确实是字符串格式(你的后端已经做到了):
// 先定义对应的数据接口 interface TableData { // 其他业务字段... createTime: string; // 这里用string类型接收日期 } // 调用接口时指定类型 this.configurationService.retrieveTableData(this.schemaFullname, this.tableName) .subscribe((data: TableData) => { // 此时data.createTime就是后端返回的原始字符串"2018-05-17 19:08:25.203" console.log(data.createTime); });
方案二:自定义JSON解析逻辑,跳过日期自动转换
如果不想修改接口类型,可以让HttpClient返回原始文本,然后手动解析JSON,在解析过程中保留日期字符串:
首先修改服务里的接口调用方法,指定responseType: 'text':
// 在configurationService中的方法 retrieveTableData(schemaFullname: string, tableName: string): Observable<string> { return this.http.get(`${你的API地址}/table-data`, { params: { schemaFullname, tableName }, responseType: 'text' // 让HttpClient返回原始文本,不自动解析JSON }); }
然后在订阅时手动解析,自定义处理日期字段:
this.configurationService.retrieveTableData(this.schemaFullname, this.tableName) .subscribe(rawText => { const data = JSON.parse(rawText, (key, value) => { // 判断值是否符合你的日期格式,是的话直接返回原始字符串 if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}$/.test(value)) { return value; } // 其他字段正常解析 return value; }); // 现在data里的日期就是原始格式了 });
方案三:把Date对象转回目标格式(事后补救)
如果已经拿到了时间戳或者Date对象,也可以手动格式化成你需要的字符串:
this.configurationService.retrieveTableData(this.schemaFullname, this.tableName) .subscribe(data => { // 假设data里的日期字段是Date对象或者时间戳 const dateObj = new Date(data.yourDateField); // 格式化为"YYYY-MM-DD HH:mm:ss.SSS" const formattedDate = `${dateObj.getFullYear()}-${String(dateObj.getMonth()+1).padStart(2, '0')}-${String(dateObj.getDate()).padStart(2, '0')} ${String(dateObj.getHours()).padStart(2, '0')}:${String(dateObj.getMinutes()).padStart(2, '0')}:${String(dateObj.getSeconds()).padStart(2, '0')}.${String(dateObj.getMilliseconds()).padStart(3, '0')}`; console.log(formattedDate); // 输出"2018-05-17 19:08:25.203" });
个人最推荐方案一,前后端明确约定字段类型,既能避免解析歧义,也让代码更清晰易懂。
内容的提问来源于stack exchange,提问作者xzk
相关产品推荐
相关产品推荐

