You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

moment.js解析SharePoint返回日期时间自动减4小时如何修复?

问题原因

SharePoint列表API返回的/Date(1657281600000)/是ASP.NET序列化的UTC时间格式,内部的毫秒值是UTC基准的绝对时间戳。出现固定4小时时间差的核心原因有两个:

  • 直接把带/Date()包裹的完整字符串传入moment,部分版本moment对该格式的解析存在兼容偏差
  • 解析时默认取代码运行环境的本地时区做偏移,和你需要对齐的SharePoint站点时区存在4小时时差(夏令时阶段的美东时区刚好是UTC-4,是这类问题的最高发场景)
修复方案

第一步:提前提取纯时间戳,避免格式解析问题

不要直接把完整的/Date(xxx)/字符串传入moment,先正则提取内部的数字时间戳:

const rawDate = myDateTime[i].start;
const timeStamp = parseInt(rawDate.match(/\d+/)[0]);

第二步:按业务场景选择解析逻辑

场景1:需要展示为访问用户的本地时间

不需要引入moment-timezone,直接用时间戳初始化moment后格式化即可:

myRealDateTime = moment(timeStamp).format('MM/DD/YYYY hh:mm a')

该方案下不同时区用户看到的是自己所在时区的对应时间,适合面向跨时区用户、不需要和SharePoint后台显示时间强绑定的场景。

场景2:需要和SharePoint站点显示的时间完全一致

必须引入moment-timezone,先确认SharePoint站点配置的对应时区ID,解析时手动指定时区即可解决固定偏移问题:

// 示例:SharePoint站点配置为美国东部时区时的写法
myRealDateTime = moment(timeStamp).tz('America/New_York').format('MM/DD/YYYY hh:mm a')

如果你的SharePoint站点用的是中国时区,把时区参数替换为Asia/Shanghai即可,其他时区可以查moment-timezone支持的时区ID列表对应替换。

内容的提问来源于stack exchange,提问作者KenNotAnthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:57:17