将波斯(贾拉利)日历转换为表单字段输入的时间戳

Convert Persian (Jalali) calendar to timestamp on form field entry

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

Form ScreenShot

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

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

编辑: 字段输入的日期格式为 d-m-yy (eg. 15-12-1400)

以下函数会将波斯语 (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));
//==========================================================