Рассчитать последний день месяца в JavaScript - PullRequest
238 голосов
/ 21 октября 2008

Если вы укажете 0 как dayValue в Date.setFullYear, вы получите последний день предыдущего месяца:

d = new Date(); d.setFullYear(2008, 11, 0); //  Sun Nov 30 2008

Существует ссылка на это поведение на mozilla . Это надежная функция кросс-браузер или я должен искать альтернативные методы?

Ответы [ 16 ]

1 голос
/ 01 июня 2016

Этот работает хорошо:

Date.prototype.setToLastDateInMonth = function () {

    this.setDate(1);
    this.setMonth(this.getMonth() + 1);
    this.setDate(this.getDate() - 1);

    return this;
}
0 голосов
/ 25 мая 2019
function _getEndOfMonth(time_stamp) {
    let time = new Date(time_stamp * 1000);
    let month = time.getMonth() + 1;
    let year = time.getFullYear();
    let day = time.getDate();
    switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            day = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            day = 30;
            break;
        case 2:
            if (_leapyear(year))
                day = 29;
            else
                day = 28;
            break
    }
    let m = moment(`${year}-${month}-${day}`, 'YYYY-MM-DD')
    return m.unix() + constants.DAY - 1;
}

function _leapyear(year) {
    return (year % 100 === 0) ? (year % 400 === 0) : (year % 4 === 0);
}
0 голосов
/ 28 декабря 2017

Функция ниже дает последний день месяца:

function getLstDayOfMonFnc(date)
{
    return new Date(date.getFullYear(), date.getMonth(), 0).getDate()
}

console.log(getLstDayOfMonFnc(new Date(2016, 2, 15)))   // Output : 29
console.log(getLstDayOfMonFnc(new Date(2017, 2, 15)))   // Output : 28
console.log(getLstDayOfMonFnc(new Date(2017, 11, 15)))  // Output : 30
console.log(getLstDayOfMonFnc(new Date(2017, 12, 15)))  // Output : 31

Точно так же мы можем получить первый день месяца:

function getFstDayOfMonFnc(date)
{
    return new Date(date.getFullYear(), date.getMonth(), 1).getDate()
}

console.log(getFstDayOfMonFnc(new Date(2016, 2, 15)))   // Output : 1
0 голосов
/ 20 апреля 2017

Я знаю, что это просто вопрос семантики, но в итоге я использовал это в этой форме.

var lastDay = new Date(new Date(2008, 11+1,1) - 1).getDate();
console.log(lastDay);

Поскольку функции разрешаются из внутреннего аргумента, внешний вид работает аналогично.

Затем можно просто заменить год и месяц / год требуемыми данными, будь то текущая дата. Или определенный месяц / год.

0 голосов
/ 27 ноября 2016

установите месяц, который вам нужен для даты, а затем установите день на ноль, поэтому месяц начинается с 1 - 31 в функции даты, а затем получается последний день ^^

var last = new Date(new Date(new Date().setMonth(7)).setDate(0)).getDate();
console.log(last);
0 голосов
/ 15 января 2015
function getLastDay(y, m) {
   return 30 + (m <= 7 ? ((m % 2) ? 1 : 0) : (!(m % 2) ? 1 : 0)) - (m == 2) - (m == 2 && y % 4 != 0 || !(y % 100 == 0 && y % 400 == 0)); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...