2016-08-12 13 views
7

Natknąłem się w pozornie znanym źródle na dziwną manipulację datami, której nie rozumiem. Jest to część próbek w dokumentacji dla popularnego ramach UI:JavaScript dziwne manipulowanie datami

var startDate = start.value(); // returns Date object 
startDate = new Date(startDate); 
startDate.setDate(startDate.getDate()); 

Teraz linia po linii var startDate = start.value(); to linie zwraca obiekt Date i zapisuje je w startDate zmiennej. W porządku, nie ma problemu.

Następnie tworzymy nowy obiekt Date o tej samej wartości i przypisujemy go do tej samej zmiennej (lekko mylące, ale mogę z tym żyć).

Trzecia linia to prawdziwa zagadka - otrzymujemy dzień miesiąca (poprzez getDate) i przypisujemy go jako dzień miesiąca (poprzez setDate) w tej samej zmiennej.

Teraz pytanie: czy jest to zły kod, ewentualnie resztki z niedokończonego refaktoryzacji? Czy to naprawdę ma sens i robi pewne manipulacje, takie jak usuwanie czasu (nie wygląda na to)? Jeśli tak, to co robi?

UPD: przykładowy kod tutaj http://demos.telerik.com/kendo-ui/datepicker/rangeselection

+1

Czy jest to starszy kod dla określonej przeglądarki? Poza tą opcją nie mogę wymyślić żadnego powodu, by to zrobić. – Nit

+0

@Nit kodu przykładowego - nic o starszych wersjach lub przeglądarkach. – trailmax

+0

Pojawia się (przynajmniej po uruchomieniu w konsoli Chrome), aby utworzyć wiele nowych obiektów daty. Jeśli nie ma określonego celu, ten kod jest w rzeczywistości dość nieefektywny. –

Odpowiedz

3

Źródłem jest dostępna w wielu formatach, a jeśli mamy wglądu do nich wszystko:

HTML5/JavaScript:

startDate.setDate(startDate.getDate()); 

asp.netto:

startDate.setDate(startDate.getDate() + 1); 

jsp:

startDate.setDate(startDate.getDate() + 1); 

php:

startDate.setDate(startDate.getDate() + 1); 

Możemy wyraźnie zobaczyć pierwszy (jeden pan powiązany) wyróżnia się, gdzie powinny być takie same. Doprowadziłoby to do przekonania, że ​​problemem jest zwykły błąd literowy.

+0

OK, to nie ma magii w ostatniej linii. Uff! – trailmax

2

Lets go wiersz po wierszu:

startDate = new Date(startDate); 

zwróci tę samą datę, jeśli startDate jest Date

var someDate = new Date(5555555113); 
 
console.log(someDate); 
 
startDate = new Date(someDate); 
 
console.log(startDate);

Ale jeśli start.value() powraca albo milisekund, czyli ciąg, przekazaniem go do new Date zapewni cokolwiek z tych 3 sposobów stanowią Date jest używany, dostaniesz przedmiot Date.

var someDate = 5555555113; 
 
var startDate = new Date(someDate); 
 
console.log(startDate); 
 

 
someDate = "1970-03-06T07:12:35.113Z"; 
 
startDate = new Date(someDate); 
 
console.log(startDate);

Teraz kolejna linia:

startDate.setDate(startDate.getDate()); 

To nie ma żadnego sensu, jak będzie to powrót samo Date

var startDate = new Date(); 
 
console.log(startDate); 
 
startDate.setDate(startDate.getDate()) 
 
console.log(startDate);

+0

Dobra uwaga na temat konwersji z ciągu lub milisekund! – trailmax