gpt4 book ai didi

javascript - 将波斯 (Jalali) 日历转换为表单字段条目上的时间戳

转载 作者:行者123 更新时间:2023-12-03 08:09:09 24 4
gpt4 key购买 nike

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

Form ScreenShot

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

是否有任何 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));
//==========================================================

关于javascript - 将波斯 (Jalali) 日历转换为表单字段条目上的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71308941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com