Как рассчитать разницу в неделях в Javascript из формы недели HTML? - PullRequest
0 голосов
/ 10 октября 2018

Я ищу способ заполнить недельный элемент формы в соответствии с вводом другого недельного элемента формы.Я довольно новичок в Javascript.

В основном мне нужно узнать разницу в неделях между формой c1 и c2.Затем заполните d1 и d2 автоматически с той же разницей в неделю, но с d1, начинающимся через неделю после c2.

Пример:

c1 = "2018-W01"

c2 =«2018-W05»

Следует установить значения d1 и d2:

d1 = «2018-W06»

d2 = «2018-W10»

    <input type="week" id="c1">
    <input type="week" id="c2">
    <input type="week" id="d1" readonly>
    <input type="week" id="d2" readonly>

<script>
function myFunction() {
    var d1 = document.getElementById("c1").value;
    var d2 = document.getElementById("c2").value;
    var year = d1.substring(0,4); //2018
    var day1 = d1.substring(6,);  //01
    var day2 = d2.substring(6,);  //05

    var difference = day2 - day1; //5

    document.getElementById("d1").value = d1 + difference; // ?
    document.getElementById("d2").value = d2 + difference;
</script> 

Этот фрагмент кода, очевидно, не работает, но показывает то, что я думаю.Это действительно поднимает проблему с датами, которые пересекаются между двумя годами.Спасибо за помощь!

Ответы [ 6 ]

0 голосов
/ 10 октября 2018

попробуйте это ..

function myFunction(d1, d2) {

var year1 = parseInt(d1.substring(0, 4)); //2018
var year2 = parseInt(d2.substring(0, 4));
var yearDiff = Math.abs(year1 - year2);
var weeksInYears = 52 * yearDiff;

var day1 = parseInt(d1.substring(6, ));  //01
var day2 = parseInt(d2.substring(6, ));  //05

var difference = Math.abs(weeksInYears - (day2 - day1));  // handled dates with different years
var week1 = day2 + 1;
var week2 = week1 + difference;
week1 = ((week1 < 10 ? '0' : '') + week1);
week2 = ((week2 < 10 ? '0' : '') + week2)
var res = year1 + "-" + "W" + (week1); // ?
var res1 = year2 + "-" + "W" + (week2);
console.log(res, res1);}
0 голосов
/ 10 октября 2018

momentjs - это библиотека, которую вы должны использовать для управления датой и временем.

она поможет вам просто управлять каждым значением даты.

var a = moment('2016-01-01'); 
var b = a.add(1, 'week'); 
a.format();
"2016-01-08T00:00:00-06:00"

См. Эти примеры:

https://codepen.io/bassfiddle/pen/lrLwy

0 голосов
/ 10 октября 2018
Hope, i could help you... I had use this in one of my project.

function diff_weeks(dt2, dt1){
var diff =(dt2.getTime() - dt1.getTime()) / 1000;
diff /= (60 * 60 * 24 * 7);
return Math.abs(Math.round(diff));
}
dt1 = new Date(2014,10,4);
dt2 = new Date(2014,10,12);
console.log(diff_weeks(dt1, dt2));

dt1 = new Date("June 4, 1990 08:11:00");
dt2 = new Date("October 10, 2018 11:13:00");
console.log(diff_weeks(dt1, dt2));
0 голосов
/ 10 октября 2018

Попробуйте.

Я хочу получить полные годы (которые содержат 52 недели), поэтому я использовал

 year2-(year1+1),  

Чтобы исключить оба года, я добавляюгод1 недели (52-неделя1)

и затем добавляется неделя2

    var year1 = d1.substring(0,4); //2017
    var year2 = d1.substring(0,4); //2018
    var week1 = d1.substring(6,);  //01
    var week2 = d2.substring(6,);  //05
    let result = 52 *( year2 - (year1 + 1) ) + (52 - week1) + week2
0 голосов
/ 10 октября 2018

Измените эти две строки

   var day1 = parseInt(d1.substring(6,));  //1
    var day2 = parseInt(d2.substring(6,));  //5

Тогда это должно работать, но лучше работать с датами Javascript -> Хорошая ссылка https://www.w3schools.com/js/js_dates.asp

0 голосов
/ 10 октября 2018

В JS можно использовать https://momentjs.com/

Эта библиотека решит вашу проблему с любыми операциями на дату

...