2009-03-03 6 views
22

Учитывая объект даты, как получить первый день своего предыдущего месяца в JavaScriptНайти первый день предыдущего месяца в JavaScript

+0

более описательное название может быть хорошо ... – helloandre

+0

я обновил название – Prestaul

+0

http://stackoverflow.com/questions/594054/date-problem-in-java выглядит ваш предыдущий вопрос был для Java. так что не совсем дубликат :) –

ответ

32
function firstDayInPreviousMonth(yourDate) { 
    var d = new Date(yourDate); 
    d.setDate(1); 
    d.setMonth(d.getMonth() - 1); 
    return d; 
} 

EDIT: Хорошо ... Я определенно узнал что-то здесь. Я думаю, что это самое простое решение, которое охватывает все случаи (и да, это действительно работает на январь):

function firstDayInPreviousMonth(yourDate) { 
    return new Date(yourDate.getFullYear(), yourDate.getMonth() - 1, 1); 
} 
+0

Обратите внимание, что это будет FAIL для чего-то вроде: firstDayInPreviousMonth (новая дата («31 марта 2009»)). См. Комментарии по адресу: http://stackoverflow.com/questions/499838/javascript-date-next-month – Shog9

+0

Это не сработает, если он установит (1) перед выполнением setMonth() –

+0

Да, это работает хорошо. – Shog9

12

Следующая должно работать:

now = new Date(); 
if (now.getMonth() == 0) { 
    current = new Date(now.getFullYear() - 1, 11, 1); 
} else { 
    current = new Date(now.getFullYear(), now.getMonth() - 1, 1); 
} 

, имея в виду, что месяцы нуль- на основе так декабрь вместо 12.

Но, как уже отмечалось, в месяц обручи, даже как часть атомного конструктора, так что следующий также возможно:

now = new Date(); 
firstDayPrevMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1); 
+1

Мне нравится этот подход, но ваше решение на самом деле неверно. Когда getMonth() == 1, месяц - февраль.Вы хотите проверить getMonth() == 0, и даже это не требуется, потому что конструктор Date принимает отрицательные значения и работает правильно. – Prestaul

+0

Вы пренебрегаете тем фактом, что setMonth будет обертывать значения. Ответ Престола отлично работает в январе. – overslacked

+0

Да, но не для возврата к месяцу, где, к сожалению, число дней меньше. Лучше строить новую дату атомарно, а не по частям. – paxdiablo

2

Мне это нравится. Это не может быть кратчайшим, но подчеркивает некоторые функции методы SETDATE() по дате() объектов, которые не все знакомы с:

function firstDayPreviousMonth(originalDate) { 
    var d = new Date(originalDate); 
    d.setDate(0); // set to last day of previous month 
    d.setDate(1); // set to the first day of that month 
    return d; 
} 

Он использует тот факт, что .setDate (0) изменит дату, чтобы указать на последний день предыдущего месяца, в то время как .setDate (1) изменит ее (далее), чтобы указать на первый день этого месяца. Это позволяет основным Javascript-библиотекам делать тяжелый подъем.

Вы можете увидеть working Plunk here.

0

Это поможет получить предыдущий месяц первой и последней даты.

function getLastMonth(){ 
     var now = new Date(); 
     var lastday = new Date(now.getFullYear(), now.getMonth(), 0); 
     var firstday = new Date(lastday.getFullYear(), lastday.getMonth(), 1); 
     var lastMonth = firstday.getDate()+'/'+(firstday.getMonth()+1)+'/'+firstday.getFullYear()+' - '+lastday.getDate()+'/'+(firstday.getMonth()+1)+'/'+lastday.getFullYear(); 
     return lastMonth; 
} 
Смежные вопросы