これは私のhtmlページです
<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>
これは私の指令です
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);
}
}
})
Mument.jsを使用して、fromdateとtodateの間の範囲を取得する必要があります。誰でも私のシナリオでこれを行う方法を提案できますか?前もって感謝します
2つの日付の間の残りの日付を取得するには、このコードを参照できます。
$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);
これはコンソールログです:
[「火24-05」、「水25-05」、「木26-05」、「金27-05」、「土28-05」、「日29-05」、「月30-05」、 「火曜日31-05」、「水曜日01-06」、「木曜日02-06」、「金曜日03-06」、「土曜日04-06」、「日曜日05-06」、「月曜日06-06」、火07-06」、「水08-06」、「木09-06」、「金10-06」、「土11-06」、「日12-06」、「月13-06」、「火14-06」、「水15-06」、「木16-06」、「金17-06」、「土18-06」、「日19-06」、「月20-06」、「火21 -06 "、" Wed 22-06 "]
次のようなことをして、数日で違いを得ることができます。
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 [〜#〜]
toArray
関数の小さな例を追加しました:
const getDaysRange = (date1, date2) => {
if (date1 && date2) {
return Math.abs(moment(date2).diff(moment(date1), 'days')) + 1;
}
return undefined;
};
独自の関数を作成するほど楽しくはありませんが、簡単な答えは https://github.com/rotaready/moment-range を使用することです
2つの日付の間で連続した日を取得する場合:
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*/
});
私はこれが古い/回答済みの質問であることを知っていますが、それはグーグルの一番上にあるので、moment
のみで(そして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
}
終了日を除く、2つの間のすべての「タイプ」(月/日/時間など)の配列を返します
例:
let range = getRange('2019-01-01', '2019-01-05', 'days')
// moment dates -> [ '2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04' ]