Как я могу получать первый и последний день конкретной недели в Javascript

Мне хотелось бы знать, как я могу получать в первый и последний день одной недели в частности в Javascript.

Например, если я имею неделю 14 2016 года, получать, что первый день - 4 апреля (Понедельник) и последний 10 апреля (Воскресенья).

Единственное, что я нашел, было направляя, как Я Датировал настоящую дату системы, но не одной недели в частности.

7
задан 05.04.2016, 22:51
2 ответа

Я буду оставлять два метода, чтобы делать вычисления без необходимости внешних библиотек, только с языком сценариев JavaScript. Каждый метод возвратит различную стоимость.

Метод 1: натуральная неделя

Этот метод считает, что первая неделя года начинается в первый день года, не импортируя, какой день в частности.

  • Создай функцию, в которую ты перемещал бы его год Y и неделю X
  • В этой функции, он создает дату с первым днем года Y (1 января Y)
  • Добавь 7 * (число недель - 1) дни в дату
  • Полученная дата будет первым днем недели X года Y
  • Добавь его 6 дней и ты будешь иметь в последний день недели X года Y

Здесь я оставляю demo (я упрощаю немного вычисление первого и последнего дня недели):

var meses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
var dias = ["Domingo","Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"];

function calculaSemana() {
  
  // obtenemos los valores de año y semana (asumimos que son valores válidos)
  var year = document.getElementById("year").value;
  var week = document.getElementById("week").value;
  
  // añadimos validación a la semana
  if (week < 1 || week > 53) { alert("Error: la semana debe ser un número entre 1 y 53"); return false; }
  
  // obtenemos el primer y último día de la semana del año indicado
  var primer = new Date(year, 0, (week - 1) * 7 + 1);
  var ultimo = new Date(year, 0, (week - 1) * 7 + 7);
  
  // mostramos el resultado
  document.getElementById("resultado").innerHTML = 
    "El primer día de la " + week + "<sup>a</sup> semana de " + year + " es " + primer.getDate() + " de " + meses[primer.getMonth()] + " (" + dias[primer.getDay()] + ")<br/>" +
    "El último día de la " + week + "<sup>a</sup> semana de " + year + " es " + ultimo.getDate() + " de " + meses[ultimo.getMonth()] + " (" + dias[ultimo.getDay()] + ")"; 
  
}
<input type="year" id="year" placeholder="Año" />
<input type="number" id="week" placeholder="Semana" min="1" max="53" />
<input type="button" onclick="calculaSemana()" value="Calcular" />

<div id="resultado"></div>

Метод 2: неделя Международная организация по стандартизации

Этот метод считает, что первая неделя года начинается в первый понедельник года (что может оставлять в какие-то осиротевшие дни недели).

Идея сходная с предыдущим методом, единственное различие состоит в том, что сначала мы предполагаем, какой день недели - первый день года, и с этого времени точно подходим для того, чтобы исчисленная дата всегда совпала с понедельником.

Здесь я оставляю demo:

var meses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
var dias = ["Domingo","Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"];

function calculaSemana() {

  // obtenemos los valores de año y semana (asumimos que son valores válidos)
  var year = document.getElementById("year").value;
  var week = document.getElementById("week").value;

  // obtenemos el primer dia del año
  var primerdia = new Date(year, 0, 1);
  
  // obtenemos la corrección necesaria
  var correccion = 6 - primerdia.getDay();
  
  // validación para la semana
  if (week * 7 + correccion > 365) { alert("El valor para semana no es válido"); return false; }
  
  // obtenemos el lunes y domingo de la semana especificada
  var primer = new Date(year, 0, (week - 1) * 7 + 3 + correccion);
  var ultimo = new Date(year, 0, (week - 1) * 7 + 9 + correccion);

  // mostramos el resultado
  document.getElementById("resultado").innerHTML = 
    "El primer día de la " + week + "<sup>a</sup> semana de " + year + " es " + primer.getDate() + " de " + meses[primer.getMonth()] + " (" + dias[primer.getDay()] + ")<br/>" +
    "El último día de la " + week + "<sup>a</sup> semana de " + year + " es " + ultimo.getDate() + " de " + meses[ultimo.getMonth()] + " (" + dias[ultimo.getDay()] + ")"; 

}
<input type="year" id="year" placeholder="Año" />
<input type="number" id="week" placeholder="Semana" min="1" max="53" />
<input type="button" onclick="calculaSemana()" value="Calcular" />

<div id="resultado"></div>
9
ответ дан 24.11.2019, 14:38
  • 1
    Поскольку мастер на все руки, делать это вручную введи вирусы, если ты обращаешь внимание помещения первой недели 2016, закончись, что начинает один s и # 225; bado и заканчивается пятница. Что неправильное. – rnrneverdies 05.04.2016, 16:49
  • 2
    В моей защите dir и # 233; что OP не especific и # 243; если quer и # 237; в натуральную неделю (первый d и # 237; в в и # 241; или быть и # 237; в начале первой недели) или первая неделя завершает (начинаясь в понедельник). Сейчас я исправляю для того, чтобы это была первая полная неделя. – Alvaro Montoro♦ 05.04.2016, 16:52
  • 3
    Я голосую за +1, из-за стоимости это делать в руку на использовании титанического книжного магазина как momentjs – jasilva 05.04.2016, 17:51
  • 4
    это формула, которая функционирует, итак, который осуществлен в системе моего предприятия. en.wikipedia.org/wiki/… – rnrneverdies 05.04.2016, 18:59
  • 5
    @jasilva Делать это в руку, таково, как они делают это храбрыми. Очень хорошо. – Rodney Salcedo 06.04.2016, 02:18

Восходите у него есть Ваши ограничения, всегда ты можешь создавать твоих собственных mГ©todos, но даты осложнены, так как есть несколько исключений в правило. Поэтому, использовать одну librerГ - в, как momentjs включает решения и не проблемы.

оставил Тебе пример, (ты должен открывать консоль с F12, чтобы видеть результаты)

console.log(moment().isoWeek(14).startOf("isoweek"));
console.log(moment().isoWeek(14).endOf("isoweek"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.js"></script>
Moment {Mon Apr 04 2016 00:00:00 GMT-0300 (Argentina Standard Time)}
Moment {Sun Apr 10 2016 23:59:59 GMT-0300 (Argentina Standard Time)}
6
ответ дан 24.11.2019, 14:38