使用数据属性在JavaScript中转换日期

时间:2019-02-06 20:06:31

标签: javascript date gregorian-calendar

我有一个javascript函数,可以将公历转换为jalali日期:

year=2019;
month=2;
day=6;

shamsi=gregorian_to_jalali(year,month,day);

document.write(shamsi[0]+ '/' +shamsi[1]+ '/' +shamsi[2]);

此结果告诉我:1397/12/4

出于某种原因,我想在多个标签中使用数据属性,例如:

<date year="2019" month="2" day="6"></date>

每个人都必须返回里面

主要功能是:

function gregorian_to_jalali(gy,gm,gd){
 g_d_m=[0,31,59,90,120,151,181,212,243,273,304,334];
 if(gy > 1600){
  jy=979;
  gy-=1600;
 }else{
  jy=0;
  gy-=621;
 }
 gy2=(gm > 2)?(gy+1):gy;
 days=(365*gy) +(parseInt((gy2+3)/4)) -(parseInt((gy2+99)/100)) +(parseInt((gy2+399)/400)) -80 +gd +g_d_m[gm-1];
 jy+=33*(parseInt(days/12053)); 
 days%=12053;
 jy+=4*(parseInt(days/1461));
 days%=1461;
 if(days > 365){
  jy+=parseInt((days-1)/365);
  days=(days-1)%365;
 }
 jm=(days < 186)?1+parseInt(days/31):7+parseInt((days-186)/30);
 jd=1+((days < 186)?(days%31):((days-186)%30));
 return [jy,jm,jd];
}

3 个答案:

答案 0 :(得分:0)

您可以使用data- *属性存储这些值。

<div id="date" data-year="2019" data-month="2" data-day="6"></div>

稍后,您可以使用HTMLElement.dataset属性在javascript中读取这些值。

const dateElement = document.getElementById('date')

const year = dateElement.dataset.year // "2019"
const month = dateElement.dataset.month // "2"
const day = dateElement.dataset.day // "6"

此外,如果希望将转换后的日期打印在同一元素中,只需使用Node.textContent进行设置。

dateElement.textContent = gregorian_to_jalali(year, month, day).join('/')

答案 1 :(得分:0)

您可以将它们放在JSON格式的单个属性中,然后可以解析JSON以获取值:

// Stub for dev
function gregorian_to_jalali(gy, gm, gd){
  console.log(`From gregorian_to_jalali: ${gy}, ${gm}, ${gd}`);
}

// Get value from element and parse
function getValue(element) {
  let {year, month, day} = JSON.parse(element.dataset.value);
  return [year, month, day];
}

// Get values
console.log(getValue(document.querySelector('date')));

// Use in a function
gregorian_to_jalali(...getValue(document.querySelector('date')));
<date data-value='{"year":"2019","month":"2","day":"6"}'></date>

答案 2 :(得分:0)

这是一件令人着迷的作品!

const year = Number(dateElement.dataset.year) // "2019"
const month = Number(dateElement.dataset.month) // "2"
const day = Number(dateElement.dataset.day) // "6"

我想将其用于多个标签,例如:

<div id="date" class="date" data-year="2019" data-month="3" data-day="6"></div>
<div id="date" class="date" data-year="2019" data-month="4" data-day="7"></div>
<div id="date" class="date" data-year="2019" data-month="5" data-day="8"></div>
<div id="date" class="date" data-year="2019" data-month="6" data-day="9"></div>
<div id="date" class="date" data-year="2019" data-month="7" data-day="10"></div>

我知道document.getElementById()一次仅支持一个名称,并且仅返回单个节点而不是节点数组。但它不适用于getElementsByClassName或TagName