2016-03-02 12 views
8

Ho un oggetto data che voglioRimuovere secondi/millisecondi da Data convertire in stringa ISO

  1. rimuovere le millisecondi/o impostato su 0
  2. togliere i secondi/o impostato su 0
  3. conversione in stringa ISO

ad esempio:

var date = new Date(); 
//Wed Mar 02 2016 16:54:13 GMT-0500 (EST) 

var stringDate = moment(date).toISOString(); 
//2016-03-02T21:54:13.537Z 

Ma quello che voglio veramente alla fine è

stringDate = '2016-03-02T21:54:00.000Z' 

risposta

0

È possibile utilizzare il metodo startOf() all'interno di moment.js per ottenere ciò che si desidera.

Ecco un esempio:

var date = new Date(); 
 

 
var stringDateFull = moment(date).toISOString(); 
 
var stringDateMinuteStart = moment(date).startOf("minute").toISOString(); 
 

 
$("#fullDate").text(stringDateFull); 
 
$("#startOfMinute").text(stringDateMinuteStart);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.js"></script> 
 
<p>Full date: <span id="fullDate"></span></p> 
 
<p>Date with cleared out seconds: <span id="startOfMinute"></span></p>

16

Non v'è alcuna necessità di una libreria, è sufficiente impostare i secondi ei millisecondi a zero e utilizzare il metodo incorporato toISOString:

var d = new Date(); 
 
d.setSeconds(0,0); 
 
document.write(d.toISOString());

Nota: toISOString non è supportato da IE 8 e inferiore, c'è un pollyfil on MDN.

+0

Ma questo mostra ancora il millis. Non c'è un modo per rimuovere il millis senza una libreria e senza splicing o qualche tipo di regex? Sono sorpreso che non possiamo semplicemente formattare l'oggetto data come vogliamo in PHP. – wuno

+0

@ wuno-non sarebbe fantastico? Sfortunatamente gli oggetti Data ECMAScript non hanno alcun supporto di formattazione, assolutamente nessuno. Esiste il [* Intl.DateTimeFormat *] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat) supportato da [* Date.prototype.toLocaleString *] (https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString) per alcuni browser, ma non è definitivo nel specificare il risultato. Una buona libreria di analisi e formattazione è [* fecha.js *] (https://github.com/taylorhakes/fecha). – RobG

+0

Sì, sarebbe lol. Sono andato avanti e ho usato toISOString() quindi ho usato il metodo della sottostringa (0,19). Pensi che sia sicuro? Anche se il formato suggerito per la data è questo, 2007-07-25T11: 46: 24 è sicuro assumere che non è necessario essere UTC? Perché lasciando questo fuori lascerà solo fino alla posizione del server per impostare l'ora e la data in base al fuso orario del server. Ho ragione? Grazie per l'aiuto! – wuno

2

Soluzioni javascript pure per tagliare secondi e millisecondi (ovvero rimuovere, non solo impostare su 0). JSPerf dice che la seconda funzione è più veloce.

function getISOStringWithoutSecsAndMillisecs1(date) { 
 
    const dateAndTime = date.toISOString().split('T') 
 
    const time = dateAndTime[1].split(':') 
 
    
 
    return dateAndTime[0]+'T'+time[0]+':'+time[1] 
 
} 
 

 
console.log(getISOStringWithoutSecsAndMillisecs1(new Date()))


 
function getISOStringWithoutSecsAndMillisecs2(date) { 
 
    const dStr = date.toISOString() 
 
    
 
    return dStr.substring(0, dStr.indexOf(':', dStr.indexOf(':')+1)) 
 
} 
 

 
console.log(getISOStringWithoutSecsAndMillisecs2(new Date()))

0

Un po 'in ritardo qui, ma ora è possibile:

var date = new Date();

questo obj ha:

date.setMilliseconds(0);

e

date.setSeconds(0);

quindi chiamare toISOString() come si fa e vi andrà bene.

Nessun momento o altri punti.