Angular中生成类似MomentJS的UTC格式时间(带Z后缀)
实现Angular原生Date对象模拟MomentJS的UTC日起始格式化效果
要实现和moment(this.routeParams.startTime).utc(true).startOf('day').format()一致的输出(YYYY-MM-DDTHH:mm:ssZ格式),可以通过Angular原生Date API完成,无需依赖第三方库,步骤如下:
1. 解析输入时间
先将路由参数中的时间值转换为Date对象:
const inputDate = new Date(this.routeParams.startTime);
2. 获取UTC时区的当日起始时间
构造新的Date对象,使用原日期的UTC年、月、日,将时分秒设为0:
const utcStartOfDay = new Date( Date.UTC( inputDate.getUTCFullYear(), inputDate.getUTCMonth(), inputDate.getUTCDate(), 0, 0, 0 // 固定为UTC时间的00:00:00 ) );
3. 格式化为目标字符串
利用Date的toISOString()方法生成标准UTC格式字符串,再去掉多余的毫秒部分:
const formattedTime = utcStartOfDay.toISOString().slice(0, 19) + 'Z'; // 输出示例:2023-09-11T00:00:00Z
完整代码示例
getUtcStartOfDay(): string { const inputDate = new Date(this.routeParams.startTime); const utcStartOfDay = new Date( Date.UTC( inputDate.getUTCFullYear(), inputDate.getUTCMonth(), inputDate.getUTCDate(), 0, 0, 0 ) ); return utcStartOfDay.toISOString().slice(0, 19) + 'Z'; }
关键说明
Date.UTC()生成UTC时间戳,以此创建的Date对象会被视为UTC时区时间;toISOString()默认返回带毫秒的格式(如2023-09-11T00:00:00.000Z),通过slice(0,19)截取前19位去掉毫秒,再手动添加Z后缀;- 逻辑完全匹配MomentJS的
utc(true).startOf('day').format(),确保输出为UTC当日零点,格式符合需求。
内容的提问来源于stack exchange,提问作者MYTH JENKEN
相关产品推荐
相关产品推荐

