Angular/JS/TS将日期格式化为yyyy-MM-dd'T'HH:mm:ss.SSSZ的方法
toLocaleDateString 本身无法实现这个需求,不需要在这个方法的参数上尝试了。这个API的定位是输出适配指定地区的本地化**纯日期(仅年月日)**字符串,没有提供时分秒、毫秒、时区标识的输出配置,且不同JS运行环境的本地化实现存在差异,即使硬凑options参数,也没法稳定输出符合yyyy-MM-dd'T'HH:mm:ss.SSSZ规范的结果。
下面给不同场景下的简便实现方案:
原生JS/TS通用方案(零依赖)
场景1:需要UTC时区标准格式(结尾固定为Z)
直接调用Date实例内置的toISOString()方法即可,输出完全匹配格式要求,不需要额外传参:
const currentDate = new Date().toISOString(); // 输出示例:2024-05-20T09:22:31.426Z
场景2:需要本地时区格式(结尾为+0800/-0500这类时区偏移值)
写一个轻量格式化函数即可,全环境兼容:
const formatISOLocal = (date: Date): string => { const pad = (val: number, len = 2) => String(val).padStart(len, '0'); const [ year, month, day, hour, minute, second, ms ] = [ date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds() ]; // 处理时区偏移 const offset = date.getTimezoneOffset(); const offsetSign = offset > 0 ? '-' : '+'; const offsetHour = pad(Math.abs(Math.floor(offset / 60))); const offsetMin = pad(Math.abs(offset % 60)); return `${year}-${pad(month)}-${pad(day)}T${pad(hour)}:${pad(minute)}:${pad(second)}.${pad(ms, 3)}${offsetSign}${offsetHour}${offsetMin}`; }; // 调用示例 const currentDate = formatISOLocal(new Date()); // 东八区输出示例:2024-05-20T17:22:31.426+0800
Angular环境专属方案
直接用框架内置的DatePipe即可,不需要自己写格式化逻辑:
import { DatePipe } from '@angular/common'; // 非构造函数内使用可直接实例化,依赖注入场景直接注入DatePipe实例即可 const datePipe = new DatePipe('zh-CN'); const currentDate = datePipe.transform(new Date(), "yyyy-MM-dd'T'HH:mm:ss.SSSZ"); // 输出示例:2024-05-20T17:22:31.426+0800
内容的提问来源于stack exchange,提问作者Learn AspNet
相关产品推荐
相关产品推荐

