使用AJAX jQuery获取SharePoint列表日期时间字段显示格式异常求助
哈哈,这个场景太常见了——SharePoint REST返回的ISO日期格式确实有点反人类,既要保留日期字段的原生选择器方便用户输入,又要在前端展示成清爽的yyyy/mm/dd,完全没问题,给你几个实用的解决方案:
解决方案:前端解析并格式化ISO日期字符串
核心思路就是把SharePoint返回的ISO 8601格式(比如2020-07-01T04:00:00Z)转换成JavaScript的Date对象,再拼接成你需要的格式。下面是两种常用的实现方式:
方法1:原生JavaScript自定义函数(兼容性强)
写一个简单的工具函数,专门处理日期格式化,适合所有浏览器环境:
function formatToYYYYMMDD(isoDate) { const dateObj = new Date(isoDate); // 注意:月份是从0开始计数的,所以要+1 const year = dateObj.getFullYear(); const month = String(dateObj.getMonth() + 1).padStart(2, '0'); // 补零确保两位 const day = String(dateObj.getDate()).padStart(2, '0'); return `${year}/${month}/${day}`; }
然后在你的AJAX回调里调用这个函数:
$.ajax({ url: "/_api/web/lists/getbytitle('你的列表名')/items", method: "GET", headers: { "Accept": "application/json; odata=verbose" }, success: function(response) { const items = response.d.results; let tableContent = '<table><thead><tr><th>Date Submitted</th></tr></thead><tbody>'; items.forEach(item => { // 替换成你实际的字段内部名称(比如DateSubmitted或Date_x0020_Submitted) const formattedDate = formatToYYYYMMDD(item.DateSubmitted); tableContent += `<tr><td>${formattedDate}</td></tr>`; }); tableContent += '</tbody></table>'; $('#your-table-container').html(tableContent); }, error: function(err) { console.error('拉取数据失败:', err); } });
方法2:用Intl.DateTimeFormat简化代码(ES6+)
如果你的项目支持ES6及以上语法,可以用浏览器原生的国际化API来格式化,代码更简洁,还能灵活调整格式:
function formatToYYYYMMDD(isoDate) { // en-CA格式默认是yyyy-mm-dd,我们把横杠替换成斜杠 return new Intl.DateTimeFormat('en-CA', { year: 'numeric', month: '2-digit', day: '2-digit' }).format(new Date(isoDate)).replace(/-/g, '/'); }
注意事项
- 字段内部名称:SharePoint的字段显示名和内部名可能不一样(比如“Date Submitted”的内部名可能是
Date_x0020_Submitted),可以在列表设置的字段详情里查看,确保AJAX返回的字段名正确。 - 时区问题:上面的代码默认用本地时间解析,如果需要保留UTC时间,把
getFullYear()换成getUTCFullYear(),getMonth()换成getUTCMonth(),getDate()换成getUTCDate()即可。
内容的提问来源于stack exchange,提问作者BeerusDev
相关产品推荐
相关产品推荐

