2016-03-02 11 views
8

ich ein Date Objekt, das ichentfernen Sekunden/Millisekunden ab Datum konvertieren ISO String

wollen
  1. entfernen Sie die miliseconds/oder auf 0 gesetzt
  2. entfernen Sie die Sekunden/oder auf 0 gesetzt
  3. Convert to ISO String

zum Beispiel:

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 

Aber was ich will am Ende wirklich ist

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

Antwort

0

Sie können die Methode startOf() innerhalb von moment.js verwenden, um zu erreichen, was Sie wollen.

Hier ist ein Beispiel:

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

Es besteht keine Notwendigkeit für eine Bibliothek, stellen Sie einfach die Sekunden und Millisekunden auf Null und verwenden Sie die eingebaute in toISOString Methode:

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

Hinweis: toISOString wird nicht von IE 8 und niedriger unterstützt, gibt es eine pollyfil on MDN.

+0

Aber das zeigt immer noch die Millis. Gibt es keine Möglichkeit, die Millis ohne eine Bibliothek und ohne Spleiß oder irgendeine Art von Regex zu entfernen? Ich bin überrascht, dass wir das Datumsobjekt nicht einfach so formatieren können, wie wir es in PHP wollen. – wuno

+0

@ wuno-wäre das nicht toll? Leider haben ECMAScript Date-Objekte überhaupt keine Formatierungsunterstützung, absolut keine. Es gibt das [* Intl.DateTimeFormat *] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat), das von [* Date.prototype.toLocaleString *] unterstützt wird (https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString) für einige Browser, ist aber nicht entscheidend für die Angabe des Ergebnisses. Eine gute Analyse- und Formatierungsbibliothek ist [* fecha.js *] (https://github.com/taylohakes/fecha). – RobG

+0

Ja, es wäre lol. Ich ging weiter und gewöhnte anISOString() und verwendete dann die Teilzeichenkette (0,19). Glaubst du, dass das sicher ist? Auch wenn das Datum vorgeschlagen Format ist dies, 2007-07-25T11: 46: 24 ist es sicher anzunehmen, dass es nicht UTC sein muss? Da dies verlassen wird, wird es dem Serverstandort überlassen, die Uhrzeit und das Datum basierend auf der Zeitzone des Servers einzustellen. Hab ich recht? Danke für Ihre Hilfe! – wuno

2

Pure Javascript-Lösungen zum Ausschneiden von Sekunden und Millisekunden (das ist Entfernen, nicht nur auf 0 gesetzt). JSPerf sagt die zweite Funktion ist schneller.

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

Ein bisschen spät hier, aber jetzt können Sie:

var date = new Date();

dieses obj hat:

date.setMilliseconds(0);

und

date.setSeconds(0);

dann toISOString() nennen, wie Sie tun, und Sie werden in Ordnung sein.

Kein Moment oder andere Deps.