Использование атрибутов данных для преобразования даты в JavaScript - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть функция 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 голосов
/ 07 февраля 2019

Вы можете поместить их в один атрибут в формате 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>
0 голосов
/ 08 февраля 2019

это работает как шарм!

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

0 голосов
/ 06 февраля 2019

Вы можете использовать атрибут data- * для хранения этих значений.

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

Позже вы можете прочитать эти значения в javascript, используя свойство HTMLElement.dataset.

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('/')
...