Como los cálculos que he encontrado por ahí no valen para España tocó desarrollar.
El cálculo que hace JavaScript es teniendo el principio de la semana en domingo y de ahí que en otros códigos el 2 de enero del 2023 de como resultado la semana 1 (w1).

Este se repetirá cada vez que el día 1 de enero sea domingo (cada 11 años aprox.). Al modificar un proyecto lo he descubierto y por eso publico mi solución/función.
function numerosemana(date) {
var d = new Date(date);
var year = d.getFullYear();
var inicioyear = new Date(year, 0, 1);
var diascompletarsemana1 = (inicioyear.getDay() || 7)-1;
var diaspasados = (d - inicioyear) / (24*60*60*1000); // Date - Date devuelve milisegundos
var semanaspasadas = ( diaspasados + diascompletarsemana1 ) / 7 ;
return Math.ceil(semanaspasadas);//redondeo al alza
}
Creo que no hace falta explicar el código.
Etiquetas: JavaScript