Получить дату начала и окончания текущей недели (неделя начинается с понедельника и заканчивается в воскресенье) - PullRequest
16 голосов
/ 05 декабря 2011

Я хочу отобразить дату начала и дату окончания текущей недели. (начало недели = понедельник, конец недели = воскресенье) Мне удается отобразить понедельник.

Но я не могу получить воскресную дату. Пожалуйста, напишите мне, если у кого-нибудь есть решение.

Ответы [ 11 ]

31 голосов
/ 05 декабря 2011
<script>
Date.prototype.getWeek = function(start)
{
        //Calcing the starting point
    start = start || 0;
    var today = new Date(this.setHours(0, 0, 0, 0));
    var day = today.getDay() - start;
    var date = today.getDate() - day;

        // Grabbing Start/End Dates
    var StartDate = new Date(today.setDate(date));
    var EndDate = new Date(today.setDate(date + 6));
    return [StartDate, EndDate];
}

// test code
var Dates = new Date().getWeek();
alert(Dates[0].toLocaleDateString() + ' to '+ Dates[1].toLocaleDateString())
</script>

Я считаю, что это работает.

11 голосов
/ 09 октября 2012

Следующая функция поможет:

// return an array of date objects for start (monday)
// and end (sunday) of week based on supplied 
// date object or current date
function startAndEndOfWeek(date) {

  // If no date object supplied, use current date
  // Copy date so don't modify supplied date
  var now = date? new Date(date) : new Date();

  // set time to some convenient value
  now.setHours(0,0,0,0);

  // Get the previous Monday
  var monday = new Date(now);
  monday.setDate(monday.getDate() - monday.getDay() + 1);

  // Get next Sunday
  var sunday = new Date(now);
  sunday.setDate(sunday.getDate() - sunday.getDay() + 7);

  // Return array of date objects
  return [monday, sunday];
}

// Mon Nov 12 2012 00:00:00
// Sun Nov 18 2012 00:00:00
alert(startAndEndOfWeek(new Date(2012,10,14)).join('\n'));
10 голосов
/ 30 января 2014

Попробуйте это:

var current = new Date();     // get current date    
var weekstart = current.getDate() - current.getDay() +1;    
var weekend = weekstart + 6;       // end day is the first day + 6 
var monday = new Date(current.setDate(weekstart));  
var sunday = new Date(current.setDate(weekend));
3 голосов
/ 08 июля 2014

SetDate устанавливает день месяца. Использование setDate в начале и конце месяца приведет к неправильной неделе

var curr = new Date("08-Jul-2014"); // get current date
var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week
var last = first + 6; // last day is the first day + 6
var firstday = new Date(curr.setDate(first)); // 06-Jul-2014
var lastday = new Date(curr.setDate(last)); // 12-Jul-2014

Если для параметра Дата установлено значение 01 июля 2014 года, первый день будет отображаться как 29 июня 2014 года, а последний день - 05 июня 2014 года вместо 05 июля 2014 года . Поэтому, чтобы преодолеть эту проблему, я использовал

var curr = new Date();
day = curr.getDay();
firstday = new Date(curr.getTime() - 60*60*24* day*1000); // will return firstday (i.e. Sunday) of the week
lastday = new Date(curr.getTime() + 60 * 60 *24 * 6 * 1000); // adding (60*60*6*24*1000) means adding six days to the firstday which results in lastday (Saturday) of the week
2 голосов
/ 02 октября 2014

В других примерах у вас будет проблема, когда воскресенье выпадает на другой месяц. Это должно решить проблему:

var today, todayNumber, mondayNumber, sundayNumber, monday, sunday;
    today = new Date();
    todayNumber = today.getDay();
    mondayNumber = 1 - todayNumber;
    sundayNumber = 7 - todayNumber;
    monday = new Date(today.getFullYear(), today.getMonth(), today.getDate()+mondayNumber);
    sunday = new Date(today.getFullYear(), today.getMonth(), today.getDate()+sundayNumber);
1 голос
/ 04 ноября 2017

Слегка измененный ответ @ReadWriteCode, он также успешно работает с разными месяцами.

Date.prototype.getWeek = function()
{
    var today = new Date();
    var day = today.getDay();
    var date = today.getDate() - day;

        // Grabbing Start/End Dates
    var StartDate = new Date();
    var EndDate = new Date();
    StartDate.setHours(0,0,0,0); EndDate.setHours(0,0,0,0);
    StartDate.setDate(today.getDate()-day);
    EndDate.setDate(today.getDate()-day+6);
    return {
        startDate:StartDate,
        endDate: EndDate
    };
} 
var thisWeekDates=new Date().getWeek();
1 голос
/ 11 октября 2017

Основываясь на ответе RobG, я закончил с этим, чтобы получить неделю, которая начнется в полночь понедельника и закончится в воскресенье 23: 59: 59.999.

  var weekMap = [6, 0, 1, 2, 3, 4, 5];

  function startAndEndOfWeek(date) {
    var now = new Date(date);
    now.setHours(0, 0, 0, 0);
    var monday = new Date(now);
    monday.setDate(monday.getDate() - weekMap[monday.getDay()]);
    var sunday = new Date(now);
    sunday.setDate(sunday.getDate() - weekMap[sunday.getDay()] + 6);
    sunday.setHours(23, 59, 59, 999);
    return [monday, sunday];
  }
0 голосов
/ 07 октября 2018

Использование https://momentjs.com делает его более простым.

  1. Чтобы получить неделю начиная с воскресенья и заканчивая субботой , затем используйте: moment (). startOf ("week"). toDate () и момент (). endOf ( "неделя"). Todate ()

  2. Чтобы получить неделю начиная с понедельника и заканчивая воскресением , затем используйте: moment (). startOf ("isoWeek"). toDate () и moment (). endOf ("isoWeek"). toDate ()

Попробовал это на момент v2.18.1, все работает.

Надеюсь, это поможет, больше вы можете ссылаться на моментальные документы.

0 голосов
/ 08 декабря 2016
  1. Проблемы с разными месяцами также исправлены с помощью приведенного ниже кода.
  2. Добавлена ​​функция формата "M.dd.yyyy".

    функция startAndEndOfWeek (setDate) {var day= ноль;переменная дата = ноль; переменная месяц = ​​ноль; переменная год = ноль;var mon = null;var tue = null;var wed = null;var thu = null;var fri = null;var sat = null;var sun = null;

    var now = setDate ? new Date(setDate) : new Date();
    now.setHours(0,0,0,0);
    
    var monday = new Date(now); var tuesday = new Date(now); var wednesday = new Date(now); var thursday = new Date(now);
    var friday = new Date(now); var saturday = new Date(now); var sunday = new Date(now); 
    
    if(new Date(now).getDay() == 0)
    {
        monday.setDate(monday.getDate() - 6);
        tuesday.setDate(tuesday.getDate() - 5);
        wednesday.setDate(wednesday.getDate() - 4);
        thursday.setDate(thursday.getDate() - 3);
        friday.setDate(friday.getDate() - 2);
        saturday.setDate(saturday.getDate() - 1);
        sunday.setDate(sunday.getDate() - 0);
    }
    else
    {
        monday.setDate(monday.getDate() - monday.getDay() + 1);
        tuesday.setDate(tuesday.getDate() - tuesday.getDay() + 2);
        wednesday.setDate(wednesday.getDate() - wednesday.getDay() + 3);
        thursday.setDate(thursday.getDate() - thursday.getDay() + 4);
        friday.setDate(friday.getDate() - friday.getDay() + 5);
        saturday.setDate(saturday.getDate() - saturday.getDay() + 6);
        sunday.setDate(sunday.getDate() - sunday.getDay() + 7);
    }
    
    date = monday.getDate();
    month = monday.getMonth();
    year = monday.getFullYear();
    mon = getMonthValue(month) + "." + getDateValue(date) + "." +  year;
    
    date = tuesday.getDate();
    month = tuesday.getMonth();
    year = tuesday.getFullYear();
    tue = getMonthValue(month) + "." + getDateValue(date) + "." +  year;
    
    date = wednesday.getDate();
    month = wednesday.getMonth();
    year = wednesday.getFullYear();
    wed = getMonthValue(month) + "." + getDateValue(date) + "." +  year;
    
    date = thursday.getDate();
    month = thursday.getMonth();
    year = thursday.getFullYear();
    thu = getMonthValue(month) + "." + getDateValue(date) + "." +  year;
    
    date = friday.getDate();
    month = friday.getMonth();
    year = friday.getFullYear();
    fri = getMonthValue(month) + "." + getDateValue(date) + "." +  year;
    
    date = saturday.getDate();
    month = saturday.getMonth();
    year = saturday.getFullYear();
    sat = getMonthValue(month) + "." + getDateValue(date) + "." +  year;
    
    date = sunday.getDate();
    month = sunday.getMonth();
    year = sunday.getFullYear();
    sun = getMonthValue(month) + "." + getDateValue(date) + "." +  year;
    
    return [mon, tue , wed, thu, fri, sat, sun];
    

    }

    function getMonthValue (month) {switch (month) {case 0: return "Jan";перерыв;случай 1: вернуть «фев»;перерыв;случай 2: возврат "Мар";перерыв;случай 3: возврат "апрель";перерыв;случай 4: возврат «май»;перерыв;случай 5: вернуть «июнь»;перерыв;случай 6: возврат "Jul";перерыв;дело 7: вернуть «Авг»;перерыв;случай 8: возврат «Sep»;перерыв;случай 9: возврат «окт»;перерыв;дело 10: возврат «ноябрь»;перерыв;дело 11: вернуть «дек»;перерыв;}} function getDateValue (day) {if (parseInt (day) <10) {return "0" + day;} день возвращения;} </p>

0 голосов
/ 09 февраля 2015

Я надеюсь, что это сработает для вас:

Date.prototype.getWeekEndDate = function () {
    diff = 6 - this.getDay();
    if (diff < 0) {
        diff += 6;
    }
    this.setDate(this.getDate() + (1 * diff));
    return this;
}
Date.prototype.getWeekStartDate = function () {
    diff = this.getDay() - 6;
    if (diff < 0) {
        diff += 7;
    }
    return this.setDate(this.getDate() + (-1 * diff));
}

Этот метод возвращает дату начала и дату окончания недели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...