1

我用 Confluence 中的 Confiforms 制作了一个表格,其中包括一个波斯日历字段。有一个过滤器控制宏来过滤记录。但是这个过滤器不适用于波斯日期。因为波斯日期保存为时间戳,但波斯日历字段显示日期,而不是时间戳,当我想过滤记录时,我应该在波斯日历字段中写入时间戳以使过滤器起作用。

表格截图

问题是我希望当我选择一个日期时,它将其时间戳而不是日期返回到该字段。(见图片)

是否有任何 JavaScript/jQuery 代码可以将字段的波斯日期条目转换为时间戳?

编辑:字段输入的 shamsi 日期格式为 dm-yy(例如 15-12-1400)

4

1 回答 1

0

以下函数将波斯 (Jalali) 日期转换为时间戳(基于 UTC)。

您将 Jalali 的年、月和日传递给函数,输出是 UTC 区域中的时间戳。

function jalaliToUTCTimeStamp(year, month, day) {
const format=new Intl.DateTimeFormat('en-u-ca-persian',{dateStyle:'short',timeZone:"UTC"});
let g=new Date(Date.UTC(2000,month,day));
    g=new Date(g.setUTCDate(g.getUTCDate()+226867));
const gY=g.getUTCFullYear(g)-2000+year;
    g=new Date(((gY<0)?"-":"+")+("00000"+Math.abs(gY)).slice(-6)+"-"+("0"+(g.getUTCMonth(g)+1)).slice(-2)+"-"+("0"+(g.getUTCDate(g))).slice(-2));
let [pM,pD,pY] = [...format.format(g).split("/")],i=0;
    g=new Date(g.setUTCDate(g.getUTCDate()+~~(year*365.25+month*30.44+day-(pY.split(" ")[0]*365.25+pM*30.44+pD*1))-2));
while (i<4){
[pM,pD,pY]=[...format.format(g).split("/")];
if(pD==day && pM==month && pY.split(" ")[0]==year)return +g;
g=new Date(g.setUTCDate(g.getUTCDate()+1)); i++;
}
throw new Error('Invalid Persian Date!');
}
//==========================================================
// Test Units
//==========================================================
console.log(jalaliToUTCTimeStamp(1400,12,5));
console.log(jalaliToUTCTimeStamp(1400,12,6));
console.log(jalaliToUTCTimeStamp(1400,12,7));
console.log(jalaliToUTCTimeStamp(1400,12,8));
console.log(jalaliToUTCTimeStamp(1400,12,9));
console.log(jalaliToUTCTimeStamp(1400,12,10));
console.log(jalaliToUTCTimeStamp(1400,12,11));
//==========================================================

于 2022-03-01T17:08:49.173 回答