如何从Moment对象中获取_i属性存储的原始输入时间值
问题根因
时间丢失是因为Moment解析时采用了YYYY-MM-DD格式(对应_f字段值),仅匹配了日期部分,自动截断了后续时间内容,导致_d属性的时间被重置为00:00。_i是Moment存储的原始输入字符串,所以保留了完整时间。
推荐解决方式(优先使用)
Moment所有下划线开头的属性都是内部私有变量,不属于公开API,版本更新时逻辑可能发生变化,不建议直接访问。你只需要在解析时明确指定和输入匹配的完整格式,就能正常解析出时间:
// 传入匹配原始字符串的格式 const date = moment(data.xxxxxStartDate, 'YYYY-MM-DDTHH:mm:ss'); this.xxxxxStartDate = date.format('Do MMMM YYYY'); this.xxxxxStartDateTime = date.format('HH:mm');
如果服务端返回的是标准ISO 8601格式字符串,也可以直接调用内置的ISO格式解析:
const date = moment(data.xxxxxStartDate, moment.ISO_8601);
直接获取_i值的方法
如果特殊场景必须取原始输入值,直接访问对应属性即可:
const rawTimeStr = moment(data.xxxxxStartDate)._i;
该方法依赖Moment内部实现,生产环境不推荐长期使用
内容的提问来源于stack exchange,提问作者tercou1
相关产品推荐
相关产品推荐

