2011-01-13 12 views
8

Kiedy wysłać datę przez JSON z Java do JavaScript, wysyła coś takiego:konwertować DateString Java aktualne javascript

var ds = "11:07:47 13/01/2011"; 

Javascript nie analizować ten ciąg do daty

var d = new Date(ds); 

Any pomysły?

+0

nie analizować? czy masz jakieś błędy? – SilentGhost

+0

tak. zgłasza wyjątek, używając następującego wyrażenia: if (isNaN (d)) throw SyntaxError ("invalid date"); –

+1

Tthis został poproszony w styczniu 2011 roku, dup link to kwiecień 2011, jak to może być duplikat? –

Odpowiedz

12

trzeba trochę JS że przeanalizować ciągu i powrót rok, miesiąc, dzień, minuta, godzina, sekunda w ciągi:

var hour = ds.split(":")[0], 
    minute = ds.split(":")[1], 
    last_part = ds.split(":")[2], 
    second = second_part.split(" ")[0], 
    last_part2 = second_part.split(" ")[1], 
    day = last_part2.split("/")[0], 
    month = last_part2.split("/")[1], 
    year = last_part2.split("/")[2]; 

a następnie instancji konstruktora Date:

var d = new Date (year, month, day, hour, minute, second); 
+1

Linia 3 powinna być 'sekunda = ds.split (": ") [2],', usuń czwartą linię, 5. linia powinna być 'last_part2 = ds.split (" ") [1],'. Możesz zmienić nazwę last_part2, ponieważ nie jest już druga. – Vache

+0

dzięki za napisanie kodu, działało jak czar! –

4

Aby być po bezpiecznej stronie, powinieneś uzyskać czas w milisekundach w Javie i przesłać go przez JSON do JavaScript. Można tam użyć:

var d = new Date(); 
d.setTime(valueInMilliseconds); 
3

Istnieje wiele sposobów na wywołanie konstruktora Date.
Z odniesieniem na http://www.w3schools.com/js/js_obj_date.asp:

new Date() // current date and time 
new Date(milliseconds) //milliseconds since 1970/01/01 
new Date(dateString) 
new Date(year, month, day, hours, minutes, seconds, milliseconds) 
2
function stringToDate(_date,_format,_delimiter) 
{ 
     var formatLowerCase=_format.toLowerCase(); 
     var formatItems=formatLowerCase.split(_delimiter); 
     var dateItems=_date.split(_delimiter); 
     var monthIndex=formatItems.indexOf("mm"); 
     var dayIndex=formatItems.indexOf("dd"); 
     var yearIndex=formatItems.indexOf("yyyy"); 
     var month=parseInt(dateItems[monthIndex]); 
     month-=1; 
     var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]); 
     return formatedDate; 
} 

stringToDate("17/9/2014","dd/MM/yyyy","/"); 
stringToDate("9/17/2014","mm/dd/yyyy","/") 
stringToDate("9-17-2014","mm-dd-yyyy","-") 
Powiązane problemy