Мне нужно рассчитать дату JS с учетом года = 2014 и месяца = 9 (сентябрь 2014 г.).
Я пробовал это:
var moment = require('moment');
var startDate = moment( year+'-'+month+'-'+01 + ' 00:00:00' );
var endDate = startDate.endOf('month');
console.log(startDate.toDate());
console.log(endDate.toDate());
Оба журнала показывают:
Tue Sep 30 2014 23:59:59 GMT+0200 (CEST)
Tue Sep 30 2014 23:59:59 GMT+0200 (CEST)
Дата окончания правильная, но ... почему нет даты начала?
javascript
momentjs
Фабио Б.
источник
источник
moment
идемпотент, так что вы также можете использоватьendDate = moment(starDate).endOf("month")
^. ^moment(<value>)
. Обновлен пример, чтобы использовать некоторые из более коротких функций.add(-1,"month")
не работает, если сейчас январь, а вы хотите получить месяц прошлого года.вы можете использовать это непосредственно для даты окончания или начала месяца
new moment().startOf('month').format("YYYY-DD-MM"); new moment().endOf("month").format("YYYY-DD-MM");
вы можете изменить формат, определив новый формат
источник
Когда вы используете,
.endOf()
вы изменяете объект, который он вызывает, поэтомуstartDate
становится 30 сентября.Вы должны использовать,
.clone()
чтобы сделать его копию, а не изменятьvar startDate = moment(year + '-' + month + '-' + 01 + ' 00:00:00'); var endDate = startDate.clone().endOf('month'); console.log(startDate.toDate()); console.log(endDate.toDate()); Mon Sep 01 2014 00:00:00 GMT+0700 (ICT) Tue Sep 30 2014 23:59:59 GMT+0700 (ICT)
источник
Попробуйте следующий код:
const moment=require('moment'); console.log("startDate=>",moment().startOf('month').format("YYYY-DD-MM")); console.log("endDate=>",moment().endOf('month').format("YYYY-DD-MM"));
источник
На самом деле не думаю, что есть какой-то прямой способ получить последний день, но вы могли бы сделать что-то вроде этого:
var dateInst = new moment(); /** * adding 1 month from the present month and then subtracting 1 day, * So you would get the last day of this month */ dateInst.add(1, 'months').date(1).subtract(1, 'days'); /* printing the last day of this month's date */ console.log(dateInst.format('YYYY MM DD'));
источник
ваша startDate - первый день месяца, в этом случае мы можем использовать
var endDate = moment(startDate).add(1, 'months').subtract(1, 'days');
Надеюсь это поможет!!
источник
var d = new moment(); var startMonth = d.clone().startOf('month'); var endMonth = d.clone().endOf('month'); console.log(startMonth, endMonth);
док
источник
const year = 2014; const month = 09; // months start at index 0 in momentjs, so we subtract 1 const startDate = moment([year, month - 1, 01]).format("YYYY-MM-DD"); // get the number of days for this month const daysInMonth = moment(startDate).daysInMonth(); // we are adding the days in this month to the start date (minus the first day) const endDate = moment(startDate).add(daysInMonth - 1, 'days').format("YYYY-MM-DD"); console.log(`start date: ${startDate}`); console.log(`end date: ${endDate}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"> </script>
источник
const dates = getDatesFromDateRange("2014-05-02", "2018-05-12", "YYYY/MM/DD", 1); console.log(dates); // you get the whole from-to date ranges as per parameters var onlyStartDates = dates.map(dateObj => dateObj["to"]); console.log(onlyStartDates); // moreover, if you want only from dates then you can grab by "map" function function getDatesFromDateRange( startDate, endDate, format, counter ) { startDate = moment(startDate, format); endDate = moment(endDate, format); let dates = []; let fromDate = startDate.clone(); let toDate = fromDate.clone().add(counter, "month").startOf("month").add(-1, "day"); do { dates.push({ "from": fromDate.format(format), "to": ( toDate < endDate ) ? toDate.format(format) : endDate.format(format) }); fromDate = moment(toDate, format).add(1, "day").clone(); toDate = fromDate.clone().add(counter, "month").startOf("month").add(-1, "day"); } while ( fromDate < endDate ); return dates; }
Обратите внимание, что .clone () важен в momentjs, иначе он переопределит значение. Вроде в твоем случае.
Это более общий вариант, чтобы получить несколько свиданий, которые попадают между датами.
источник
Следующий код должен работать:
$('#reportrange').daterangepicker({ startDate: start, endDate: end, ranges: { 'Hoy': [moment(), moment()], 'Ayer': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], 'Ultimos 7 dias': [moment().subtract(6, 'days'), moment()], 'Ultimos 30 dias': [moment().subtract(29, 'days'), moment()], 'Mes actual': [moment().startOf('month'), moment().endOf('month')], 'Ultimo mes': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')], 'Enero': [moment().month(0).startOf('month') , moment().month(0).endOf('month')], 'Febrero': [moment().month(1).startOf('month') , moment().month(1).endOf('month')], 'Marzo': [moment().month(2).startOf('month') , moment().month(2).endOf('month')], 'Abril': [moment().month(3).startOf('month') , moment().month(3).endOf('month')], 'Mayo': [moment().month(4).startOf('month') , moment().month(4).endOf('month')], 'Junio': [moment().month(5).startOf('month') , moment().month(5).endOf('month')], 'Julio': [moment().month(6).startOf('month') , moment().month(6).endOf('month')], 'Agosto': [moment().month(7).startOf('month') , moment().month(7).endOf('month')], 'Septiembre': [moment().month(8).startOf('month') , moment().month(8).endOf('month')], 'Octubre': [moment().month(9).startOf('month') , moment().month(9).endOf('month')], 'Noviembre': [moment().month(10).startOf('month') , moment().month(10).endOf('month')], 'Diciembre': [moment().month(11).startOf('month') , moment().month(11).endOf('month')] } }, cb);
источник
Попробуйте следующий код:
moment(startDate).startOf('months') moment(startDate).endOf('months')
источник