2013-12-13 12 views
6

Jak mogę przekonwertować ten format "Fri Jan 31 2014 00:00:00 GMT-0800 (Pacific Standard Time)" na tylko 2014-01-31 w Javascript? Wiem, że powinno to być proste ale nie mogę go z GoogleJak przekonwertować ten skomplikowany format daty na ten w javascript

+0

Czy to 'dzień spełnienia wymogu obiekt? Zapoznaj się z dostępnymi metodami: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date –

Odpowiedz

9
var d = new Date("Fri Jan 31 2014 00:00:00 GMT-0800 (Pacific Standard Time)"); 
var str = $.datepicker.formatDate('yy-mm-dd', d); 
alert(str); 

http://jsfiddle.net/3tNN8/

Wymaga to jQuery UI.

+0

Matt ... chodzi o to, że jest obiektem .. nie ciągiem znaków – user3097566

+0

@ user3097566 To właśnie 'd' jest w powyższym kodzie. Zastąp to swoim obiektem 'Date'. – Matt

+0

@ Matt - polegasz na niestandardowym zachowaniu (parsowaniu niestandardowego łańcucha daty), kod nie powiedzie się w niektórych przeglądarkach. – RobG

3

Można to zrobić następująco

var date = new Date("Fri Jan 31 2014 00:00:00 GMT-0800 (Pacific Standard Time)"); 
var year=date.getFullYear(); 
var month=date.getMonth()+1 //getMonth is zero based; 
var day=date.getDate(); 
var formatted=year+"-"+month+"-"+day; 

widzę próbujesz sformatować datę. Należy całkowicie upuścić że i używać jQuery UI

można sformatować go tak jak to wtedy

var str = $.datepicker.formatDate('yy-mm-dd', new Date("Fri Jan 31 2014 00:00:00 GMT-0800 (Pacific Standard Time)");

znalazłem Web Developer's Notes pomocne w terminach formatowania

+0

OP musi konwertować ciąg na datę, a nie bieżącą datę na ciąg –

+0

, ale gdzie czy podaję wartość pt. 31 stycznia 2014 00:00:00 GMT-0800 (czas pacyficzny standardowy) do przeliczenia? – user3097566

+0

W Chrome powoduje to '' Thu 12.12.2013 09:06:49 GMT-0500 (Eastern Standard Time) "', a nie ciąg przeznaczony. @IlyaBursov: nie, to jest kwestia manipulowania strunami. –

0

Można również korzystać z biblioteki Moment.js, upewnij się, aby go przeszukać.

kilka przykładów: moment().format('MMMM Do YYYY, h:mm:ss a');

moment().format('dddd'); 
+0

Dzięki za edytowanie komentarza Qantas! – Simme

+0

Nie ma za co. Tyle tylko, że nie dostarcza odpowiedzi, której szukał pytający - myślę, że szuka formatu "2014-01-31". –

5

jsFiddle Demo

podzielić ciąg na podstawie pustych przestrzeniach. Weź części i zrekonstruuj je.

function convertDate(d){ 
var parts = d.split(" "); 
var months = {Jan: "01",Feb: "02",Mar: "03",Apr: "04",May: "05",Jun: "06",Jul: "07",Aug: "08",Sep: "09",Oct: "10",Nov: "11",Dec: "12"}; 
return parts[3]+"-"+months[parts[1]]+"-"+parts[2]; 
} 

var d = "Fri Jan 31 2014 00:00:00 GMT-0800 (Pacific Standard Time)"; 
alert(convertDate(d)); 
+1

To jest jedyna odpowiedź, która jest bliska.Łańcuchy dat muszą być ręcznie analizowane, szczególnie gdy podany ciąg nie jest zgodny z ECMA-262 ed 5. Lepiej jest mieć miesiące jako małe litery i robić 'doLowerCase()' na części miesiąca ciągu (lub wszystkich wielkie litery i użyj 'toUpperCase()'). – RobG

1

Dla takich rzeczy często dobrze jest zrobić małe testy w konsoli przeglądarki.

var date = new Date("Fri Jan 31 2014 00:00:00 GMT-0800 (Pacific Standard Time)"); 
console.log(date.getFullYear() + '-' + date.getMonth()+1 + '-' + date.getDate()) 

Upewnij się, że dodajesz + 1 do wyniku getMonth(), ponieważ jest on oparty na zera.

Podobny pytano tutaj:

Where can I find documentation on formatting a date in JavaScript?

+0

Nawet jeśli łańcuch daty zostanie pomyślnie przeanalizowany (nie będzie w wielu przeglądarkach), powyższe dane nie będą zawierały jednocyfrowych liczb dni lub miesięcy, co prawdopodobnie jest tym, czego chce OP (choć nie jest to określone). – RobG

+0

@RobG Wygląda na to, że działa w wielu przeglądarkach. Z drugiej strony OP może dokonać oceny w oparciu o kontekst ich pytania. Oczywiście, jeśli chcesz być całkowicie bezpieczny, ręczne manipulowanie strunami bez wątpienia będzie najbardziej niezawodne. – dr4g0nus

0
A trifling refinement: 
       var date = new Date(value); 
       var year = date.getFullYear(); 
       var rawMonth = parseInt(date.getMonth()) + 1; 
       var month = rawMonth < 10 ? '0' + rawMonth : rawmonth; 
       var rawDay = parseInt(date.getDate()); 
       var day = rawDay < 10 ? '0' + rawDay : rawDay; 
       console.log(year + '-' + month + '-' + day); 
Powiązane problemy