with - JavaScript-obtenha o primeiro dia da semana a partir da data atual




title element css (8)

A resposta do CMS está correta, mas assume que segunda-feira é o primeiro dia da semana.
A resposta de Chandler Zwolle está correta, mas está brincando com o protótipo Date.
Outras respostas que jogam com horas / minutos / segundos / milissegundos estão erradas.

A função abaixo está correta e recebe uma data como primeiro parâmetro e o primeiro dia da semana desejado como segundo parâmetro (0 para domingo, 1 para segunda-feira etc.). Nota: a hora, os minutos e os segundos são definidos como 0 para o início do dia.

function firstDayOfWeek(dateObject, firstDayOfWeekIndex) {

    const dayOfWeek = dateObject.getDay(),
        firstDayOfWeek = new Date(dateObject),
        diff = dayOfWeek >= firstDayOfWeekIndex ?
            dayOfWeek - firstDayOfWeekIndex :
            6 - dayOfWeek

    firstDayOfWeek.setDate(dateObject.getDate() - diff)
    firstDayOfWeek.setHours(0,0,0,0)

    return firstDayOfWeek
}

// August 18th was a Saturday
let lastMonday = firstDayOfWeek(new Date('August 18, 2018 03:24:00'), 1)

// outputs something like "Mon Aug 13 2018 00:00:00 GMT+0200"
// (may vary according to your time zone)
document.write(lastMonday)

Eu preciso da maneira mais rápida de obter o primeiro dia da semana. Por exemplo: hoje é 11 de novembro e quinta-feira; e eu quero o primeiro dia desta semana, que é o dia 8 de novembro e uma segunda-feira. Eu preciso do método mais rápido para função de mapa do MongoDB, alguma idéia?


Aqui está a minha solução:

function getWeekDates(){
    var day_milliseconds = 24*60*60*1000;
    var dates = [];
    var current_date = new Date();
    var monday = new Date(current_date.getTime()-(current_date.getDay()-1)*day_milliseconds);
    var sunday = new Date(monday.getTime()+6*day_milliseconds);
    dates.push(monday);
    for(var i = 1; i < 6; i++){
        dates.push(new Date(monday.getTime()+i*day_milliseconds));
    }
    dates.push(sunday);
    return dates;
}

Agora você pode escolher data pelo índice de array retornado.


Confira Date.js

Date.today().previous().monday()

Confira: moment.js

Exemplo:

moment().day(-7); // last Sunday (0 - 7)
moment().day(7); // next Sunday (0 + 7)
moment().day(10); // next Wednesday (3 + 7)
moment().day(24); // 3 Wednesdays from now (3 + 7 + 7 + 7)

Bônus: funciona com node.js também


Estou usando isso

function get_next_week_start() {
   var now = new Date();
   var next_week_start = new Date(now.getFullYear(), now.getMonth(), now.getDate()+(8 - now.getDay()));
   return next_week_start;
}

Não tenho certeza como se compara para o desempenho, mas isso funciona.

var today = new Date();
var day = today.getDay() || 7; // Get current day number, converting Sun. to 7
if( day !== 1 )                // Only manipulate the date if it isn't Mon.
    today.setHours(-24 * (day - 1));   // Set the hours to day number minus 1
                                         //   multiplied by negative 24
alert(today); // will be Monday

Ou como uma função:

function getMonday( date ) {
    var day = date.getDay() || 7;  
    if( day !== 1 ) 
        date.setHours(-24 * (day - 1)); 
    return date;
}

getMonday(new Date());

Usando o método getDay de objetos Date, você pode saber o número do dia da semana (sendo 0 = domingo, 1 = segunda-feira etc.).

Você pode então subtrair esse número de dias mais um, por exemplo:

function getMonday(d) {
  d = new Date(d);
  var day = d.getDay(),
      diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
  return new Date(d.setDate(diff));
}

getMonday(new Date()); // Mon Nov 08 2010

var dt = new Date(); // current date of week
var currentWeekDay = dt.getDay();
var lessDays = currentWeekDay == 0 ? 6 : currentWeekDay - 1;
var wkStart = new Date(new Date(dt).setDate(dt.getDate() - lessDays));
var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate() + 6));

Isso vai funcionar bem.





algorithm