Hej! Ett sätt: Mitt förslag: Hej! <b>ps Per: Din verkar inte fungera. 2005-01-02 blir vecka 5.</b>week() i javascript
Jag vill alltså få veckonumret ur ett datum och denna frågan har säkert kommit upp tidigare men jag hittar inget här på pellesoft. De lösningar jag hittar på internet ger alla fel värde. De stämmer för något år men inte för andra. Någon som har ett kort script som fungerar?
mvh
/MichaelSv: week() i javascript
<code>
<script type="text/javascript" language="JavaScript"><!--
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
function getWeek(year,month,day) {
var when = new Date(year,month,day);
var newYear = new Date(year,0,1);
var modDay = newYear.getDay();
if (modDay == 0) modDay=6; else modDay--;
var daynum = ((Date.UTC(y2k(year),when.getMonth(),when.getDate(),0,0,0) -
Date.UTC(y2k(year),0,1,0,0,0)) /1000/60/60/24) + 1;
if (modDay < 4 ) {
var weeknum = Math.floor((daynum+modDay-1)/7)+1;
}
else {
var weeknum = Math.floor((daynum+modDay-1)/7);
if (weeknum == 0) {
year--;
var prevNewYear = new Date(year,0,1);
var prevmodDay = prevNewYear.getDay();
if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--;
if (prevmodDay < 4) weeknum = 53; else weeknum = 52;
}
}
return + weeknum;
}
var now = new Date();
document.write('Week number = ' +
getWeek(y2k(now.getYear()),now.getMonth(),now.getDate()));
//--></script>
</code>Sv: week() i javascript
function getISOWeek(date)
{
// Nyårsdagen
var firstDayOfYear = new Date(date.getFullYear(), 0, 1);
// Nyårsdagens veckodag (0 = måndag, ..., 6 = söndag)
var firstWeekDay = (6 + firstDayOfYear.getDay()) % 7;
// Dagnummer (nyårsdagen = 0)
var dayNo = Math.floor((date - firstDayOfYear)/(24*60*60*1000));
// Preliminärt veckonummer
var weekNo = 1 + Math.floor((dayNo+firstWeekDay)/7);
// Om nyårsdagens vecka har färre än 4 dagar detta år
// (nyårsdagen är fre, lör eller sön)
// ligger nyårsdagen inte i vecka v. 1.
if(firstWeekDay >= 4)
weekNo--;
// Om veckonumret nu är 0, är vi i föregående års sista vecka
if(weekNo == 0)
weekNo = getISOWeek(new Date(date.getFullYear()-1, 12, 31));
return weekNo;
}
Varning: Skicka inte en tidpunkt kring 2-3 på natten till funktionen. Det kan bli problem efter omställningen till sommartid. Detta borde iofs gå att kompensera för i funktionen.
Sv:week() i javascript
Tack för era förslag men jag gick över till vbscript som har en färdig funktion för detta. Nog är vbscript enklare att manipulera datum med än javascript. Om man vill få en datum fem dagar senare skriver man
vb: newdate = olddate + 5
java: newdate = new Date(olddate.getYear(), olddate.getMonth(), olddate.getDate()+5);
mvh
/Michael
ps Pelle: Detta var en av dem jag hittade på internet. Tänkte inte då på att månad ska vara mellan 0-11.
ps Per: Din verkar inte fungera. 2005-01-02 blir vecka 5.Sv: week() i javascript
Det var samma sak som du har råkat göra... Jag hade satt månadsnumret som 12 för december. Det skall ju vara 11.
Ändra till
if(weekNo == 0)
weekNo = getISOWeek(new Date(date.getFullYear()-1, 11, 31));
Om du använder VBScript, tänk på att det inte fungerar i t.ex. Firefox.