使用Moment.js计算Qualtrics中不同格式两个日期间隔天数的问题
Qualtrics中使用Moment.js计算ISO 8601格式日期差值的解决方案
错误根因
你修改后的代码报错核心原因:原生JavaScript的Date实例不存在format方法,该方法为Moment.js实例的专属方法,因此代码会直接抛出语法异常,导致逻辑中断。
Moment.js本身原生支持ISO 8601格式的日期解析,不需要额外做格式互转即可直接计算差值,推荐使用以下实现:
推荐实现(直接兼容ISO格式)
const duedate = Qualtrics.SurveyEngine.getEmbeddedData('duedate'); // 明确指定按ISO 8601规则解析日期,避免不同环境解析异常 const parsedDueDate = moment(duedate, moment.ISO_8601); // 直接生成当前时间的Moment实例即可,无需手动转格式 const currentDate = moment(); const daystodue = parsedDueDate.diff(currentDate, 'days', false); Qualtrics.SurveyEngine.setEmbeddedData('daystill', daystodue);
可选实现(按自然日计算,忽略时分秒影响)
如果需要排除时分秒干扰,仅按自然日计算天数差,可以将两个日期统一转为YYYY-MM-DD格式后再计算:
const duedate = Qualtrics.SurveyEngine.getEmbeddedData('duedate'); // 解析ISO格式到期日后转为纯日期格式 const parsedDueDate = moment(moment(duedate, moment.ISO_8601).format('YYYY-MM-DD')); // 当前日期也转为纯日期格式 const currentDate = moment(moment().format('YYYY-MM-DD')); const daystodue = parsedDueDate.diff(currentDate, 'days', false); Qualtrics.SurveyEngine.setEmbeddedData('daystill', daystodue);
内容的提问来源于stack exchange,提问作者Ilan Timerman
相关产品推荐
相关产品推荐

