You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SharePoint列表项日期与当前日期比较异常问题求助

解决SharePoint日期字段与当前日期比较的问题

咱们先把核心问题理清楚:你SharePoint列表里实际记录的是31-5-2018,但通过JavaScript获取LTIOV字段后,生成的Date对象却是Sun Jul 5 00:00:00 UTC+0200 2020,明显是日期解析出了问题,才导致后续比较逻辑失效。下面给你一步步解决的思路:

1. 先排查SharePoint返回的日期原始格式

在创建Date对象之前,先把listItem.LTIOV的原始值打印出来确认,比如加一行代码:

console.log("LTIOV原始返回值:", listItem.LTIOV);

SharePoint通常会返回ISO标准格式的日期字符串(比如2018-05-31T00:00:00Z),但如果环境配置特殊,也可能返回本地化格式,这大概率是导致new Date()解析出错的根源。

2. 手动解析日期避免格式歧义

如果原始返回值是31-5-2018这种日-月-年格式,JavaScript的Date构造函数会默认按美式的月-日-年去解析,直接用new Date()就会出问题。这时可以手动拆分字符串来创建正确的Date对象:

const dateParts = listItem.LTIOV.split('-');
// 注意:JavaScript的月份是0-11,所以要减1
const correctDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);

3. 统一时区再做比较

当前日期new Date()会包含本地时区信息,而SharePoint的日期可能是UTC时间,直接比较容易因为时区偏移出错。建议把两个日期都转成UTC时间戳(毫秒数)再对比:

const todaysDate = new Date();
// 只取当前日期的年月日部分,忽略时分秒
const todayUTC = Date.UTC(todaysDate.getFullYear(), todaysDate.getMonth(), todaysDate.getDate());
const targetUTC = Date.UTC(correctDate.getFullYear(), correctDate.getMonth(), correctDate.getDate());

if (targetUTC < todayUTC) {
    console.log("LTIOV日期早于今天");
} else {
    console.log("LTIOV日期晚于或等于今天");
}

4. 从源头规范日期返回格式(可选)

如果你是通过SharePoint REST API获取列表项,可以在请求URL里指定返回标准ISO格式的日期,从根源避免解析问题:

/_api/web/lists/getbytitle('你的列表名称')/items?$select=LTIOV&$expand=LTIOV

这样返回的LTIOV会是标准ISO字符串,直接用new Date()就能正确解析。


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

火山引擎 最新活动