Dies ist meine HTML-Seite
<tr ng-show="option == 'Yearly' || option == 'Date'">
<td>
<label>From:</label>
</td>
<td>
<input type="text" ng-model="fromdate" id="from" date-picker date-type="from" month-directive />
{{fromdate}}
</td>
<td>
<label>To:</label>
</td>
<td>
<input id="todate" type="text" ng-model="todate" date-picker date-type="to" month-directive />
{{todate}}
</td>
</tr>
Das ist meine Weisung
app.directive('monthDirective', function () {
return {
restrict:'A',
link: function (scope, elem) {
var fromDate, toDate;
scope.$watch('fromdate', function (newValue, oldValue) {
fromDate = newValue;
console.log('fromDate', newValue);
});
scope.$watch('todate', function (newValue, oldValue) {
todate = newValue;
console.log('todate', newValue);
});
var range = moment().range(fromDate, toDate);
var diff = moment.preciseDiff(fromDate,toDate);
console.log('Range', range);
console.log('diff', diff);
}
}
})
Ich muss den Bereich zwischen fromdate und todate mithilfe von mument.js ermitteln. Kann jemand in meinem Szenario vorschlagen, wie das geht. Danke im Voraus
Um den Rest der Termine zwischen zwei Terminen zu erhalten, können Sie diesen Code verwenden.
$scope.dateArr = []; //Array where rest of the dates will be stored
$scope.prevDate = moment().subtract(15, 'days');//15 days back date from today(This is the from date)
$scope.nextDate = moment().add(15, 'days');//Date after 15 days from today (This is the end date)
//extracting date from objects in MM-DD-YYYY format
$scope.prevDate = moment($scope.prevDate._d).format('MM-DD-YYYY');
$scope.nextDate = moment($scope.nextDate._d).format('MM-DD-YYYY');
//creating JS date objects
var start = new Date($scope.prevDate);
var end = new Date($scope.nextDate);
//Logic for getting rest of the dates between two dates("FromDate" to "EndDate")
while(start < end){
$scope.dateArr.Push(moment(start).format('ddd DD-MM'));
var newDate = start.setDate(start.getDate() + 1);
start = new Date(newDate);
}
console.log('Dates:- ');
console.log($scope.dateArr);
Dies ist das Konsolenprotokoll: -
["Di 24-05", "Mi 25-05", "Do 26-05", "Fr 27-05", "Sa 28-05", "So 29-05", "Mo 30-" 05 "," Di 31-05 "," Mi 01-06 "," Do 02-06 "," Fr 03-06 "," Sa 04-06 "," So 05-06 "," Mo 06-06 "," Di 07-06 "," Mi 08-06 "," Do 09-06 "," Fr 10-06 "," Sa 11-06 "," So 12-06 ", "Mo 13-06", "Di 14-06", "Mi 15-06", "Do 16-06", "Fr 17-06", "Sa 18-06", "So." 19-06 "," Mo 20-06 "," Di 21-06 "," Mi 22-06 "]
Sie können so etwas tun, um den Unterschied in Tagen zu ermitteln:
var fromDate = moment();
var toDate = moment().add(15, 'days');
var range = moment().range(fromDate, toDate);
var diff = range.diff('days');
var array = range.toArray('days');
$.each(array, function(i, e) {
$(".container").append("<li>" + moment(e).format("DD MM YYYY") + "</li>");
});
console.log('Range', range);
console.log('diff', diff);
EDIT
Ich habe ein kleines Beispiel für die toArray
-Funktion hinzugefügt:
const getDaysRange = (date1, date2) => {
if (date1 && date2) {
return Math.abs(moment(date2).diff(moment(date1), 'days')) + 1;
}
return undefined;
};
Auch wenn Sie nicht so viel Spaß haben wie Ihre eigenen Funktionen, ist die einfache Antwort die Verwendung von https://github.com/rotaready/moment-range
Wenn Sie aufeinander folgende Tage zwischen zwei Terminen erhalten möchten:
npm i moment && npm i moment-range
const
Moment = require("moment"),
MomentRange = require("moment-range"),
moment = MomentRange.extendMoment(Moment); /*add plugin to moment instance*/
let
range = moment().range("2018-02-20", "2018-03-01"), /*can handle leap year*/
array = Array.from(range.by("days")); /*days, hours, years, etc.*/
array.map(m => {
console.log(m.format("YYYY-MM-DD")); /*or any format you like*/
});
Ich weiß, dass dies eine alte/beantwortete Frage ist, aber da es bei Google ganz oben steht, erfahren Sie hier, wie Sie einen Datumsbereich mit nur moment
(und ohne moment-range
):
import moment from 'moment'
/**
* @param {date|moment} start The start date
* @param {date|moment} end The end date
* @param {string} type The range type. eg: 'days', 'hours' etc
*/
function getRange(startDate, endDate, type) {
let fromDate = moment(startDate)
let toDate = moment(endDate)
let diff = toDate.diff(fromDate, type)
let range = []
for (let i = 0; i < diff; i++) {
range.Push(moment(startDate).add(i, type))
}
return range
}
Gibt ein Array von jedem "Typ" (Monat/Tag/Stunde usw.) zwischen den beiden zurück, ausschließlich des Enddatums
Beispiel:
let range = getRange('2019-01-01', '2019-01-05', 'days')
// moment dates -> [ '2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04' ]