ChatGPT解决这个技术问题 Extra ChatGPT

Moment js get first and last day of current month

How do I get the first and last day and time of the current month in the following format in moment.js:

2016-09-01 00:00

I can get the current date and time like this: moment().format('YYYY-MM-DD h:m') which will output in the above format.

However I need to get the date and time of the first and last day of the current month, any way to do this?

EDIT: My question is different from this one because that asks for a given month that the user already has whereas I am asking for the current month along with asking for a specific format of the date that is not mentioned in the other so called 'duplicate'.

Moment.js support the function to get the first and last day of month, you can get that for current month by : moment().startOf('month') and moment().endOf('month') . I think you should view the answer from this
@TanLe Yes but this outputs in the following format: Thu Sep 01 2016 00:00:00 GMT+0100 (GMT Summer Time) I want the format as I've mentioned in my question
That function return the moment object for day, so you can use format to output with any format that you want. Like : moment().startOf('month').format('YYYY-MM-DD HH:mm').
@AuditeMarlow Nice try but the questions are slightly different as explained in my edit.

A
Ali

In case anyone missed the comments on the original question, you can use built-in methods (works as of Moment 1.7):

const startOfMonth = moment().startOf('month').format('YYYY-MM-DD hh:mm');
const endOfMonth   = moment().endOf('month').format('YYYY-MM-DD hh:mm');

Don't know why somebody deleted the original comments but the reason this was not the accepted answer was because it was posted many months after the accepted answer.
thanks @user3574492 not a big deal, thanks for clarification - if you think this answer is the best one then I think it is possible to change it to the accepted answer, even if it was posted later.
moment(1, "DD"); will return first day of current month
why we need clone here ?
.Clone() is needed since a lot of the functions will modify the moment date. One example is x = momentDate.add(1,"day"); momentDate will be modified here, adding one day as well as settting x. StartOf month will set the moment to the start of the month.
A
Akoya

There would be another way to do this:

var begin = moment().format("YYYY-MM-01");
var end = moment().format("YYYY-MM-") + moment().daysInMonth();

K
Kevin Grosgojat

You can do this without moment.js

A way to do this in native Javascript code :

var date = new Date(), y = date.getFullYear(), m = date.getMonth();
var firstDay = new Date(y, m, 1);
var lastDay = new Date(y, m + 1, 0);

firstDay = moment(firstDay).format(yourFormat);
lastDay = moment(lastDay).format(yourFormat);

This outputs in the default date format Thu Sep 01 2016 00:00:00 GMT+0100 (GMT Summer Time) not in the format I want it: 2016-09-01 00:00
Use moment to format the date ... firstDay = moment(firstDay).format('MM/DD/YYYY'); lastDay = moment(lastDay).format('MM/DD/YYYY');
and how to get startdate and enddate of next month using this formula?
i
ifelse.codes

moment startOf() and endOf() is the answer you are searching for.. For Example:-

moment().startOf('year');    // set to January 1st, 12:00 am this year
moment().startOf('month');   // set to the first of this month, 12:00 am
moment().startOf('week');    // set to the first day of this week, 12:00 am
moment().startOf('day');     // set to 12:00 am today

A
Alexander Nana Owusu

Assuming you are using a Date range Picker to retrieve the dates. You could do something like to to get what you want.

$('#daterange-btn').daterangepicker({
            ranges: {
                'Today': [moment(), moment()],
                'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
                'Last 7 Days': [moment().subtract(6, 'days'), moment()],
                'Last 30 Days': [moment().subtract(29, 'days'), moment()],
                'This Month': [moment().startOf('month'), moment().endOf('month')],
                'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
            },
            startDate: moment().subtract(29, 'days'),
            endDate: moment()
        }, function (start, end) {
      alert( 'Date is between' + start.format('YYYY-MM-DD h:m') + 'and' + end.format('YYYY-MM-DD h:m')}

M
Mo.

As simple we can use daysInMonth() and endOf()

const firstDay = moment('2016-09-15 00:00', 'YYYY-MM-DD h:m').startOf('month').format('D')
const lastDay = moment('2016-09-15 00:00', 'YYYY-MM-DD h:m').endOf('month').format('D')

D
Dharman

I ran into some issues because I wasn't aware that moment().endOf() mutates the input date, so I used this work around.

let thisMoment = moment(); let endOfMonth = moment(thisMoment).endOf('month'); let startOfMonth = moment(thisMoment).startOf('month');


always use moment().clone(), if you want to use the same variables.
J
Jojo Joseph

First and Last Date of current Month In the moment.js

console.log("current month first date");
    const firstdate = moment().startOf('month').format('DD-MM-YYYY');
console.log(firstdate);

console.log("current month last date");
    const lastdate=moment().endOf('month').format("DD-MM-YYYY"); 
console.log(lastdate); 

F
Fahad Khan
console.log("current month first date");
    const firstdate = moment().startOf('month').format('DD-MM-YYYY');
console.log(firstdate);

console.log("current month last date");
    const lastdate=moment().endOf('month').format("DD-MM-YYYY"); 
console.log(lastdate);

// THIS IS THE SIMPLEST OF GETTING DATES IN MOMENTJS