2017-02-14 9 views
1

Ich bin sehr neu zu eckigen JS, aber seit dem Morgen damit zu kämpfen.Konvertieren ersten Tag des Monats zum letzten Tag des Monats in Angular JS

Ich habe einen Datepicker mit "MM/JJJJ" -Format, der hier zurückgegebene Datumswert ist der erste Tag des Monats. , d.h. 1. Februar 2017, aber ich möchte das Datum als 28. Februar 2017, d. H. Letzter Tag des Monats.

Nur zur Aktualisierung verwende ich Momentfunktion.

Bitte schlagen Sie etwas Arbeit für das gleiche vor!

Antwort

2

ich aus Ihrer Frage ableiten, die Sie momentjs verwenden.

Diese lib liefert Ihnen eine endof in Funktion gebaut

const date = new Date(2017, 1) // 1st Feb  
moment(date).endOf('month'); 

Dies sollte den meisten Fällen direkt leap years

2

Wenn Sie einen JavaScript-Date Instanz d haben, können Sie einfach

const d = new Date(2017, 1) // 1st Feb 
 
d.setMonth(d.getMonth() + 1) 
 
d.setDate(d.getDate() - 1) 
 

 
console.info(d.toLocaleString())

Jetzt d wird der letzte Tag des Monats sein.


Hinweis: Dies behandelt problemlos Jahresgrenzen ohne zusätzlichen Code. Zum Beispiel

const d = new Date(2017, 11) // 1st Dec 
 
console.info('Before', d.toLocaleString()) 
 

 
d.setMonth(d.getMonth() + 1) 
 
d.setDate(d.getDate() - 1) 
 

 
console.info('After', d.toLocaleString())

+0

einschließlich Griff Dies ist eine gute Stenografie Weg, es zu tun, aber denken Sie daran, dass durch das Sie tun‘ Abhängig von der Javascript-Engine (die je nach Version, Browser und Plattform unterschiedlich ist), um die Konvertierung für Sie durchzuführen, wie Sie es erwarten, ist dies anfällig für Fehler. Es ist immer besser, nur von Ihrem Code abhängig zu sein, um die richtigen Conversions selbst vorzunehmen, anstatt blind auf etwas anderes zu vertrauen, wie die JS-Engine-Implementierung. – ablopez

+0

@ablopez was * "Konvertierungen" * redest du? Wenn Sie sich auf das Jahr-Limit-Problem beziehen (dh den Monat auf "12" setzen), müssen Sie mir ein Beispiel zeigen, dass es nicht funktioniert. Ich glaube nicht, dass das Verhalten hier zwischen JS-Motoren variiert. Siehe https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate#Description – Phil

+0

Ich habe nie gesagt, es würde nicht funktionieren. Was ich sagen will ist, dass sich der Freund auf Implementierungsaspekte verlässt, um einen logischen Fehler in seinem eigenen Code zu beheben. Wenn Sie dies in anderem Code tun, den Sie schreiben (unabhängig davon), folgen Sie nur einem langsamen Programmiermuster und erhöhen die Wahrscheinlichkeit von Fehlern in Ihrem Code insgesamt. – ablopez

0

Sie müssen nur 1 Monat bis zu dem Datum hinzufügen und dann subtrahieren 1 Tag. Hier ein Beispiel:

// Let's suppose the date selected from the picker was February 1st, 2017 
// Remember months in JS are zero-index based, so 0=Jan, 1=Feb, etc. 
var selectedDate = new Date(2017, 1, 1); 

var month = selectedDate.getMonth(); 
var year = selectedDate.getFullYear(); 

month ++; 

if(month > 11){ // Last month number is 11 (December) 
    month = 0; // January 
    year ++; 
} 

var oneMonthAheadDate = new Date(year, month, 1); 
var lastDayOfSelectedMonthDate = new Date(oneMonthAheadDate.getTime() - (1000 * 3600 * 24)); // We substract 1 day (1000 ms x 3600 secs in an hour x 24 hours in a day) 

Ihr benötigt Datum wird in lastDayOfSelectedMonthDate

Verwandte Themen