2013-06-07 23 views
19

Ho qualcosa come /Date(1370001284000+0200)/ come timestamp. Immagino sia una data unix, non è vero? Come posso convertire questo in una data come questa: 31.05.2013 13:54:44da unix timestamp a datetime

Ho provato il convertitore THIS per 1370001284 e dà la data giusta. Quindi è in pochi secondi.

Ma ho ancora la data sbagliata per:

var substring = unix_timestamp.replace("/Date(", ""); 
substring = substring.replace("000+0200)/", ""); 
var date = new Date(); 
date.setSeconds(substring); 
return date; 
+0

fatto il tuo codice di generare il valore timestamp, o è al di fuori del vostro controllo? Chiedo perché '1370001284000 + 0200' non è un timestamp valido perché assomiglia a milisecondi, non secondi e contiene informazioni sulla zona. – Dai

+0

Fuori dal mio controllo. Per questo motivo non sono sicuro di cosa sia. Ma so che le partite 1370001284000 + 0200 e 31.05.2013 13:54:44. –

+0

Supponendo che tu abbia la tua sottostringa come "1370001284000" (il tempo in millisecondi dell'epoca) potresti semplicemente fare 'var date = new Date (parseInt (sottostringa, 10));' – Matijs

risposta

29

Un Unix timestamp è il numero di secondi dal 1970-01-01 00:00:00 UTC.

La presenza dello +0200 significa che la stringa numerica non è un timestamp Unix poiché contiene informazioni sull'aggiustamento del fuso orario. Devi gestirlo separatamente.

Se la stringa timestamp è espresso in millisecondi, quindi è possibile utilizzare il costruttore millisecondi e Moment.js per formattare la data in una stringa:

var t = new Date(1370001284000); 
var formatted = t.format("dd.mm.yyyy hh:MM:ss"); 

Se la stringa timestamp è espresso in secondi, quindi utilizzare setSeconds:

var t = new Date(); 
t.setSeconds(1370001284); 
var formatted = t.format("dd.mm.yyyy hh:MM:ss"); 

Nota il mio uso di t.format viene dal usando Moment.js, non fa parte dello standard Date prototipo di JavaScript.

+0

Per secondi l'anno è qualcosa come 2056 Quindi devono essere millisecondi. Ho provato var date = new Date (1370001284000); ma dice data non valida.Edit: Penso che il timestamp sia un po 'strano, perché se faccio qualcosa come timestamp * 100, ottengo una data valida ma per l'anno 4500 circa. –

+0

È necessario rimuovere la parte '+ 0200' dalla stringa, convertirla in un numero, quindi fornirla come argomento al costruttore' Date (miliseconds) '. – Dai

+0

Vedere il mio post modificato. –

2

/Date(ms + timezone)/ è una sintassi ASP.NET per date JSON. Potresti voler utilizzare una libreria come momentjs per analizzare tali date. Sarebbe utile se fosse necessario manipolare o stampare le date in qualsiasi momento successivo.

2

Importa momento js:

var fulldate = new Date(1370001284000); 
var converted_date = moment(fulldate).format("); 
+1

Stai aggiungendo una risposta a una domanda di tre anni. Generalmente è meglio se spieghi (nella risposta) perché ritieni che questa risposta sia migliore delle risposte esistenti. Altrimenti è probabile che venga downvoted o rimosso del tutto. –

+0

Questa risposta funziona con moment.js corrente – David

2

Senza moment.js:

var time_to_show = 1509968436; // unix timestamp in seconds 
 

 
var t = new Date(time_to_show * 1000); 
 
var formatted = ('0' + t.getHours()).slice(-2) + ':' + ('0' + t.getMinutes()).slice(-2); 
 

 
document.write(formatted);

1

Se si utilizza reagiscono:

import Moment from 'react-moment'; 
Moment.globalFormat = 'D MMM YYYY'; 

poi:

<td><Moment unix>{1370001284}</Moment></td>