adaugare numar zile la data din datepicker

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
andras
Mesaje: 430

adaugare numar zile la data din datepicker

Salut,
Am in pagina un input text pe care l-am facut datepicker. Folosesc

Cod: Selectaţi tot

<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
Aceasta variabila este trimisa prin ajax. Vreau ca pe baza datei sistem (datacurenta) sa setez in :success o valoare pentru alta variabila (data2), la care sa pun spre exemplu datacurenta.getDate +3, adica sa adaug 3 zile. La sfirsit vreau sa compar in JS cele 3 variabile, ex:

Cod: Selectaţi tot

<script>
if (data1 <= datacurenta && data2 >= datacurenta){ ... }
else{ ...}
</script>
Cum procedez? Am incercat in multe feluri, problema e ca atunci cind setez data2 se modifica toate datepicker. Nu inteleg de ce. Multumesc.

MarPlo
Salut
Variabila "datacurenta", e cu data-timpul transmis la ajax de pe server sau e preluata din datepicker; si ce valoare are?
Pune codul si ce ai incrcat.

andras
Am extras esentialul pentru ca e prea mult sa pun tot codul:

Cod: Selectaţi tot

<script>
var date = $('#datepickerv').datepicker('getDate'); // preia din html si are valoare Tue Sep 24 2016 00:00:00 GMT+0300 (GTB Summer Time)
var day = $.datepicker.formatDate('DD', date); // Saturday
var datalimita = date.setDate(date.getDate()+3); 
console.log(date); //Tue Sep 27 2016 00:00:00 GMT+0300 (GTB Summer Time) (de ce se schimba? N-ar trebui sa ramina tot data 24 Sep?)
console.log(datalimita); // 1474923600000
</script>
Aici e toata problema, s-a modificat si date, n-a ramas 24. Imi trebuie ca date sa fie 24 iar datalimita sa fie 27, ca sa pot incadra datacurenta inre ele (datacurenta este data pe care o alege user-ul, deci vine tot din html, poate fi 24, 25 26 sau 27).

MarPlo
Situatia prezentata se petrece deoarece instructiunea: date.setDate() face setarea datei la obiectul apelat (date), apoi returneaza valoarea la variabila (datalimita).
- Solutia e sa faci o copie a obiectului date in alta variabila si sa aplici setDate() la obiectul copiat.

Cod: Selectaţi tot

<script>
var date = $('#datepickerv').datepicker('getDate'); //ia din html, are valoare Tue Sep 24 2016 00:00:00 GMT+0300 (GTB Summer Time)
var day = $.datepicker.formatDate('DD', date); // Saturday
var datalimita = new Date(date.valueOf());  //copie obiectul date
var datalimita = datalimita.setDate(date.getDate()+3);  //seteaza data la obiectul copiat
console.log(date); //valoare nemodificata
console.log(datalimita); // 1474923600000
</script>

andras
Functioneaza, multumesc. Plus ca face automat conversia intre forma Tue Sep 27 2016 00:00:00 GMT+0300 (GTB Summer Time) si forma UNIX 1474923600000, nu mai este nevoie sa aplic functie de conversie. Deci, s-a rezolvat.

andras
Salut,
Se poate aplica o functie datepicker la o variabila venita din ajax? Ex. in :success:

Cod: Selectaţi tot

<script>
var date = $('#datepickerv').datepicker('getDate'); // Fri Sep 30 2016 00:00:00 GMT+0300 (GTB Summer Time)
var obj = msg['culege']; // array venit din ajax care contine cimpul dataexp
var dataexpirarii = obj[0].dataexp; //2016-09-30
dataexpirarii = dataexpirarii.datepicker('getDate'); // eroare :1:487 Uncaught TypeError: dataexpirarii.datepicker is not a function
</script>
Ideea este este ca vreau sa aduc dataexp (2016-09-30) la forma Fri Sep 30 2016 00:00:00 GMT+0300 (GTB Summer Time) ca sa le pot compara. In prezent JS nu le poate compara desi in baza de date cimpul dataexp este de tip DATE.

MarPlo
Nu stiu cum functioneaza datepicker(), dar din ce vad in cod, functia datepicker() se aplica la un obiect jQuery , nu la o data.
Poti sa incerci cu obiectul Date() sa transformi sirul cu data intr-un obiect JS pentru lucru cu data-timp:

Cod: Selectaţi tot

var dataexpirarii = new Date(obj[0].dataexp);
Sau, daca e pentru comparatie, datele respective le transformi in numar UnixTimestamp.

andras
Functioneaza cu obiect JS. Multumesc!

Subiecte similare