2013-06-13 19 views
6

próbuję sformatować datę, że jestem z dostaniem z API. W obiekcie mam:data formatowania z/bez Moment.js

created_at: "2013-06-13T16:29:55.245Z" 

Chciałbym wyświetlić datę jako 13.06.2013. Ktoś zasugerował, że używam pliku moment.js. Ma mnóstwo dokumentacji, ale jestem nieco zdezorientowany, jak z niego korzystać. Czy ktoś może pomóc lub zaproponować łatwiejszy sposób na zrobienie tego?

+0

Po prostu chcesz ciąg przed sformatowaniem "T"? –

Odpowiedz

8

ma potrzeby modyfikowania oryginalnego ciąg, można po prostu używać go tak:

alert(moment("2013-06-13T16:29:55.245Z").format("M/DD/YYYY")); 

Works dobrze: http://jsfiddle.net/K5ub8/2/

+0

Dlaczego alarm 4? – Anthony

+0

Zaktualizowałem skrzypce, ostrzegam o tej dacie teraz – Antoine

1

może można użyć podziału

var tuple = createdAt.split("T"); 
var date = tuple[0]; 
var dateTuple = date.split("-"); 
var day = parseInt(dateTuple[2]); 
var month = parseInt(dateTuple[1]); 
var year = parseInt(dateTuple[0]); 
var newFormatedDate = [ month , day, year ].join("/"); 
+0

-1, To daje wyjście z '13/06/2013' – Xotic750

+0

Nic wielkiego, czy to działa teraz dla ciebie ok? – Edorka

+0

Lepiej, teraz daje '06/13/2013' ale OP chciał' 6/13/2013': http://jsfiddle.net/Xotic750/mRPcP/ – Xotic750

4

W chwilach można po prostu zrobić to

var timeStr = "2013-06-13T16:29:55.245Z", 
 
    newFormat = moment(timeStr).format('M/DD/YYYY'); 
 

 
document.body.textContent = newFormat;
<script src="https://rawgithub.com/timrwood/moment/2.9.0/min/moment.min.js"></script>

Wyjście

6/13/2013 

Bez momentach i przy użyciu czystej manipulacji ciąg zamiast newDate obiektu, można zrobić

var timeStr = "2013-06-13T16:29:55.245Z", 
 
    temp = timeStr.split("T")[0].split("-").reverse(), 
 
    newFormat; 
 

 
temp[0] = temp.splice(1, 1, temp[0])[0]; 
 
newFormat = temp.join("/"); 
 
if (newFormat.charAt(0) === "0") { 
 
    newFormat = newFormat.slice(1); 
 
} 
 

 
document.body.textContent = newFormat;

Wyjście

6/13/2013 

przy użyciu obiektu Date zobaczyć @Antonyanswer. Odpowiedź usunięto

Lub jeśli potrzebujesz go więcej niż cross-browser compatible z obiektem Date, ale nadal analizować ciąg.

var timeStr = "2013-06-13T16:29:55.245Z", 
 
    intermediate = timeStr.split("T"), 
 
    newStr = intermediate[0].split("-").join("/") + " " + intermediate[1].split(".")[0] + " GMT", 
 
    newDate = new Date(newStr), 
 
    newFormat = (1 + newDate.getUTCMonth()) + "/" + newDate.getUTCDate() + "/" + newDate.getFullYear(); 
 

 
document.body.textContent = newFormat;

Wyjście

6/13/2013 

Wreszcie, można podzielić ciąg na części składowe i karmić go do Date.UTC pomocą tych argumentów, zamiast pozwolić Date zrobić parsowania ciąg.

Date.UTC (rok, miesiąc [, godzina, minuty, sekundy, ms]);

Być może teraz widzisz, dlaczego ludzie sugerują używanie moments.js, ale dopóki masz tę wiedzę, nie jest zbyt bolesne robienie tego samemu bez biblioteki.

+0

Uwielbiam twoje podejście 'moment (trasa) .format (" M/DD/RRRR ");' ale pamiętaj, aby wspomnieć, że jeśli użyjesz na przykład '0000-01-01T00: 00: 00.0Z' i nie znajduje się w strefie czasowej GMT lub na wschód od niej, aż do międzynarodowej linii czasu, przetłumaczy to jako 31 grudnia zamiast 1 stycznia. Dotyczy to osób z USA, na przykład: w przypadku EST należałoby wpisać "05: 00: 00.0Z". – vapcguy

+0

@vapcguy Należy teraz naprawić, dodał brakujący "GMT" podczas analizy i wskazał Date.UTC podczas korzystania z części. – Xotic750

+0

Chodziło mi bardziej o to, jak wszyscy, z wyjątkiem tych w GMT, musieliby upewnić się, że uwzględnili strefy czasowe, kiedy używali przykładów, aby wprowadzić je do ich lokalnego czasu. Łatwo jest przenieść go do GMT/UTC, mówiłem więcej o tym, jak go wydostać, a moim celem było raczej zakodowanie daty. 'Date.UTC()' da ci milisekundy od północy, 1/1/1970, czasu UTC, ale nadal musisz użyć 'new Date()', np. 'New Date (Date.UTC (96, 11, 1, 0, 0, 0); ', aby uzyskać datę/godzinę, która jest dobra dla twojego obszaru lokalnego. Używanie tych numerów da mi 30 listopada o 19:00, a nie 1 grudnia o 12 rano. – vapcguy

0

Możesz sprawdzić ten format czasu API - https://www.mashape.com/parsify/format#!endpoint-Time

Wpisałem w terminie "2013-06-13T16: 29: 55.245Z" i otrzymał następującą odpowiedź -

{ 
    "given": "2013-06-13T16:29:55.245Z", 
    "time": { 
    "daysInMonth": 30, 
    "millisecond": 245, 
    "second": 55, 
    "minute": 29, 
    "hour": 16, 
    "date": 13, 
    "day": 4, 
    "week": 24, 
    "month": 5, 
    "year": 2013, 
    "zone": "+0000" 
}, 
    "formatted": { 
    "weekday": "Thursday", 
    "month": "June", 
    "ago": "2 hours", 
    "calendar": "Today at 4:29 PM", 
    "generic": "2013-06-13T16:29:55+00:00", 
    "time": "4:29 PM", 
    "short": "06/13/2013", 
    "slim": "6/13/2013", 
    "hand": "Jun 13 2013", 
    "handTime": "Jun 13 2013 4:29 PM", 
    "longhand": "June 13 2013", 
    "longhandTime": "June 13 2013 4:29 PM", 
    "full": "Thursday, June 13 2013 4:29 PM", 
    "fullSlim": "Thu, Jun 13 2013 4:29 PM" 
}, 
    "array": [ 
    2013, 
    5, 
    13, 
    16, 
    29, 
    55, 
    245 
    ], 
"offset": 1371140995245, 
"unix": 1371140995, 
"utc": "2013-06-13T16:29:55.245Z", 
"valid": true, 
"integer": false, 
"zone": 0 
}