2016-07-27 18 views
1

Das Problem der Konvertierung von datepicker in moment.js ist in SO häufig aufgetaucht. Leider habe ich nach dem Testen von 10 verschiedenen Lösungen, die ich hier und im Internet gefunden habe, immer noch nicht erfolgreich von datepicker zu moment.js konvertiert, wie ich es möchte.Konvertieren von Datumszeichenfolge dd-mm-yy in moment.js gültiges Datum

Was ich mache, ist das ausgewählte Datum in jQuery Datepicker, und in diesem Fall console.log es am Ende und erhalten Sie "27-7-2016" zum Beispiel als Datepicker Datum.

$("#datepicker").datepicker({ 
    dateFormat: "dd-mm-yy", 
    maxDate: 6, 
    minDate: 0, 
    onSelect: function(dateText){ 
     startDate = dateText; 
     selectedTemp = dateText.split("-"); 
     gap = moment(selectedTemp[2]+"-"+selectedTemp[1]+"-"+selectedTemp[0]).fromNow();' 

     console.log(startDate); 
    } 
}); 

In dem gap Variable habe ich einen Moment Objekt, das mir so etwas wie "in 10 Stunden" oder "in 2 Tagen" gibt. Ich parse später, dass die Zeichenfolge in eine Zahl in wissen, wie viele Tage das ausgewählte Datum sein wird:

gap = parseInt(gap); 

ich das Datum von picker um 2 Tage zum Beispiel erhöhen will, ist, dass gehen von „27- 7-2016 "to" 29-7-2016 "mit der 2-Tage-Lücke, die ich gefunden habe. Bisher hat dies immer dazu geführt, dass ich entweder ein ganzes moment.js Objekt bekommen habe, oder ein Fehler wie ungültig, oder die .add() Methode funktioniert nicht usw.

Ich möchte auch die Resultierende "29 -7-2016 "und wandle es in" 2016-7-29 "um, aber da es keine Zeichenkette ist, kann ich keine Möglichkeit finden, dies zu tun, und immer mit Formatierungsproblemen zu kämpfen haben.

Danke.

Antwort

1

Die Methode fromNow() gibt eine Zeichenfolge zurück, kein Momentobjekt. Wenn Sie den Unterschied zwischen jetzt und dem ausgewählten Datum berechnen möchten, können Sie diff verwenden.

Sie haben ein Moment Objekt, können Sie add verwenden, um es zu ändern. Beachten Sie, dass add Moment Originalobjekt ändert.

Mit format können Sie eine Zeichenfolge abrufen, die das Momentobjekt in dem von Ihnen bevorzugten Format darstellt.

Hoffnung, dass das folgende Beispiel hilft zu verstehen, wie Sie zur Zeit verwenden können:

$("#datepicker").datepicker({ 
 
    dateFormat: "dd-mm-yy", 
 
    maxDate: 6, 
 
    minDate: 0, 
 
    onSelect: function(dateText){ 
 
    // Parse the selected string into moment object 
 
    var momDate = moment(dateText, 'DD-MM-YYYY'); 
 
    // Get gap string 
 
    // gap can be something like 'in 10 hours' 
 
    var gap = momDate.fromNow(); 
 
    // Get difference as integer 
 
    var gapInt = momDate.diff(moment().startOf('d'), 'd'); 
 
     
 
    // Here you can use add() to modify you moment object 
 
    momDate.add(gapInt, 'days'); 
 
     
 
    // Get date formatted as you like 
 
    var dateFormatted = momDate.format('YYYY-M-DD'); 
 
    console.log(dateFormatted); 
 
    } 
 
});
<link href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet"/> 
 

 
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script> 
 

 
<input id="datepicker" type="text">

+0

Dank! Das klärt wirklich die Dinge. Ich denke, das Problem war die Tatsache, dass von Now kein Augenblicksobjekt geschaffen hat. –