我在Confluence中用Confiforms制作了一个表格,其中包括一个波斯日历字段。有一个筛选器控件宏用于筛选记录。但是这个过滤器不适用于波斯日期。因为波斯日期被保存为时间戳,但波斯日历字段显示的是日期,而不是时间戳,当我想过滤记录时,我应该在波斯日历字段中写时间戳以使过滤工作。
表单屏幕截图
问题是,当我选择日期时,它会将时间戳而不是日期返回到字段。(见图(
是否有任何JavaScript/jQuery代码可以将字段的波斯日期条目转换为时间戳?
编辑:字段输入的shamsi日期格式为d-m-yy(例如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));
//==========================================================