webentwicklung-frage-antwort-db.com.de

So erhalten Sie den Datumsbereich mit moment.js

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

11
user6269870

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 "]

7
sajalsuraj

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:

https://jsfiddle.net/Tintin37/19n5ykzs/

4
Quentin Roger
const getDaysRange = (date1, date2) => {
  if (date1 && date2) {
    return Math.abs(moment(date2).diff(moment(date1), 'days')) + 1;
  }

  return undefined;
};
2
AuthorProxy

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

2
oldo.nicho

Wenn Sie aufeinander folgende Tage zwischen zwei Terminen erhalten möchten:

  1. Installiere MomentJS und MomentRange: npm i moment && npm i moment-range
  2. Etwas Code

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*/
});
0
Adam Bubela

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' ]
0
kiwicopple