Obliczanie dnia tygodnia JavaScript

0

Mam takie zadanie w js:
Napisz program który będzie wczytywał rok, miesiąc dzień. Jako wynik będzie zwracał dzień tygodnia.
dzień tygodnia = ([23m/9] + d + 4 + y + [z/4] + [z/100] + [z/400] - c) mod 7
gdzie:
[ ] oznacza część całkowitą liczby
mod – funkcja modulo (reszta z dzielenia)
m – numer miesiąca (ang. month) (od stycznia = 1 do grudnia = 12)
d – numer dnia (ang. day) miesiąca
y – rok (ang. year)
z – rok z poprawką: z = y - 1 jeżeli m < 3; z = y, jeżeli m >= 3
c – korekta (ang. correction): c = 0, jeżeli m < 3; c = 2, jeżeli m >= 3
dni tygodnia ze zbioru {0, 1, 2, 3, 4, 5, 6},
gdzie: 0 – wtorek, 1 – środa, 2 – czwartek, 3 – piątek, 4 – sobota, 5 – niedziela, 6 – poniedziałek

Napisałem następujący kod i nie mogę dopatrzeć się błędu, który popełniłem, bo funkcja nie zwraca takiego dnia, jaki powinna
function oblicz()
{
var d=document.getElementById("dzien").value;
var m=document.getElementById("miesiac").value;
var y=document.getElementById("rok").value;

var z;
var c;

if(m<3) 
{
    z=y-1;
    c=0;
}
else if(m>=3) 
{
    z=y;
    c=2;
}
else
{
    window.alert("Mamy tylko 12 miesiecy!");
}
var dzien_tygodnia=(([23*m/9]+d+4+y+[z/4]+[z/100]+[z/400]-c)%7);
var tydzien =[ "wtorek", "sroda", "czwartek", "piatek", "sobota", "niedziela","poniedziałek"];

document.getElementById("wynik").innerHTML="Dzień tygodnia dla daty:  "+d+"."+m+"."+y+"r. to "+tydzien[dzien_tygodnia];	

}
Bedę wdzięczny za każdą wskazówkę

0

Jesteś pewien, że w oryginalnym wzorze widnieje [], a nie ⌊⌋ / ⌈⌉? (https://en.wikipedia.org/wiki/Floor_and_ceiling_functions).

2

Jeśli musisz korzystać w zadaniu z tego wzoru to spróbuj zamienić zapisy document.getElementById("dzien").value na parseInt(document.getElementById("dzien").value), bo wszystkie wartości są pobierane jako tekst, a nie liczby przez co może wychodzić nieprawidłowy wynik.

Dodatkowo trzeba zamienić zapisy typu [23m/9] na odpowiedniki z obiektu Math, ponieważ javascript traktuje taki zapis jako tablicę, a nie liczbę https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Math#

Jak nie musisz z tego korzystać to wszystko można uprościć przez obiekt Date, który sam obliczy aktualny dzień tygodnia
https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Date

function oblicz() {
  const d = parseInt(document.getElementById("dzien").value);
  const m = parseInt(document.getElementById("miesiac").value);
  const y = parseInt(document.getElementById("rok").value);

  if (isNaN(d)) {
    alert('Dzień tygodnia musi być podany jako liczba');

    return;
  } else if (isNaN(m)) {
    alert('Miesiąc musi być podany jako liczba');

    return;
  } else if (isNaN(y)) {
    alert('Rok musi być podany jako liczba');

    return;
  }

  if(m > 12 || m < 1) {
    alert("Podaleś nieprawidłowy miesiąc, wpisz liczbę od 1 do 12");

    return;
  }
  
  const allDays = ["niedziela", "poniedziałek", "wtorek", "sroda", "czwartek", "piatek", "sobota"];
  const userDay = allDays[new Date(y, m - 1, d).getDay()];

  document.getElementById('wynik').innerHTML = `Dzień tygodnia dla daty: ${d}.${m}.${y} to: ${userDay}`;
}
0

parseInt zadziałało, trzeb je wstawić do pobierania danych i później wynik przekonwertować na zmienną int: dzien_tygodnia = parseInt(dzien_tygodnia);

1 użytkowników online, w tym zalogowanych: 0, gości: 1