JavaScript: obtenga una matriz de nombres de días de una fecha dada (mes/año)
Frecuentes
Visto 26,569 equipos
6
¿Cómo puedo obtener el mes completo en los nombres de los días de un mes/año determinado? me gusta :
var year = "2000";
var month = "7"
... some code here that makes an array with names of days of the given month...
y la salida se ve algo como:
Array ("1. Sunday", "2. Monday", "3. Tuesday", ... "29. Thursday", "30. Friday", "31. Saturday");
Saludos cordiales, Chris
6 Respuestas
11
Esto debería hacer lo que pediste.
function getDaysArray(year, month) {
var numDaysInMonth, daysInWeek, daysIndex, index, i, l, daysArray;
numDaysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
daysInWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
daysIndex = { 'Sun': 0, 'Mon': 1, 'Tue': 2, 'Wed': 3, 'Thu': 4, 'Fri': 5, 'Sat': 6 };
index = daysIndex[(new Date(year, month - 1, 1)).toString().split(' ')[0]];
daysArray = [];
for (i = 0, l = numDaysInMonth[month - 1]; i < l; i++) {
daysArray.push((i + 1) + '. ' + daysInWeek[index++]);
if (index == 7) index = 0;
}
return daysArray;
}
Respondido 04 Jul 12, 05:07
Si quieres que agregue comentarios para explicar lo que estoy haciendo en cada paso, házmelo saber y editaré la publicación. - natlee75
¡Muchos gracias! Esto es exactamente lo que estaba buscando. ¡Gracias de nuevo! - Chris
h @ natlee75 suponga que quiero asignar "4 nombres de personas" en todos los días del mes a partir de una matriz de personas extraída al azar. ¿Cuál es el camino correcto para lograr esto? Por otro lado, cree un turno de trabajos automáticos para todo el mes a partir de la matriz de trabajadores. Gracias por la posible respuesta - sundsx
2
Prueba esta
<!DOCTYPE html>
<html>
<body>
<p id="demo">Click the button to display todays day of the week.</p>
<button onclick="myFunction()">Try it</button>
<script type="text/javascript">
function daysInMonth(month,year) {
return new Date(year, month, 0).getDate();
}
function myFunction()
{var b=[],weekday = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],month=7,year=2000;
for(var i=1,l=daysInMonth(month,year);i<l;i++){
var d = new Date(year,month-1,i);
b.push(i+"."+weekday[d.getDay()]);
}
console.log(b);}//b is the desired array
</script>
</body>
</html>
Respondido 04 Jul 12, 05:07
Cabe señalar que en su myFunction()
, month
está basado en 1, no en cero; esa es la única forma en que su implementación de daysInMonth
funcionará correctamente. Esto puede causar confusión como javascript Date
el objeto usa un valor de mes basado en cero - jackwanders
No, el mes está basado en cero. Ver developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… - Scottheckel
Además, usando new Array
para su weekday
matriz es ineficiente, es mejor que hagas weekday = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
. Además, no hay necesidad de recrear la matriz en cada iteración de su for
círculo. - jackwanders
@Random - Invocando daysInMonth
durante cada iteración de su for
bucle es muy ineficiente. Algo en la línea de for (var i = 1, l = daysInMonth(month, year); i < l; i++)
es mejor porque el código en el segundo "segmento" de un for
loop se invoca para cada iteración a través del bucle. - natlee75
@Random: jackwanders tiene razón sobre el new Array
llamar. Es extraño que hayas usado eso allí desde que inicializaste b
la forma correcta sólo unas líneas más arriba. Definir toda la matriz desde el principio es la forma más eficiente, pero incluso declarar una matriz vacía y luego insertar cada día de la semana en ella habría sido más eficiente. - natlee75
0
FechaJS tiene las funciones que necesita para implementar la lógica:
Como señaló @ natlee75, puede manejar la lógica desde allí.
Respondido 04 Jul 12, 05:07
0
Puede hacer la lógica usted mismo con bastante facilidad utilizando el objeto Date de JavaScript estándar. Aquí hay un ejemplo de cómo obtener una fecha para insertar en su matriz. Simplemente recorra todo el mes llamando al método. (jsviolín)
var daysOfTheWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
function getDisplay(month, day, year) {
var d = new Date(year, month-1, day);
return day + '. ' + daysOfTheWeek[d.getDay()];
}
array_push($dates, getDisplay(7, 4, 2012));
Respondido 04 Jul 12, 05:07
creo que debería haber month+1
- diEcho
No, el mes se basa en cero. Enero es cero. Es por eso que lo cambié en esa función para que se corresponda con sus variables. developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… - Scottheckel
es por eso que si el usuario ingresa julio (7
), entonces java script debería interpretarlo como 6
- diEcho
Sí, es por eso que resto 1 del mes en getDisplay(). - Scottheckel
0
Intente esto y vea el resultado en la consola.
<script>
var weekday = ['Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday'];
var month = '7';
var year = '2012';
realMonth = parseInt(month,10)-1;
var monthObj = {};
for(var i=1;i<30;i++)
{
var d = new Date(year,realMonth,i);
monthObj[i] = weekday[d.getDay()];
}
console.log(monthObj);
</script>
Respondido 04 Jul 12, 05:07
0
Sé que esta es una vieja pregunta, pero hoy un pregunta vinculado a esto, y me gustaría señalar que uno realmente no necesita hacer muchas cosas además de convertir day (0-6)
a string (Sunday-Saturday)
function getDays(year, month) { //month: 1-based, as normal person
--month //change it to 0-based, as Date object
let dayname = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
let date = new Date(year, month)
let result = []
while(date.getMonth()==month){
result.push(`${date.getDate()}. ${dayname[date.getDay()]}`)
date.setDate(date.getDate()+1)
}
return result;
}
console.log(getDays(2019,12))
Respondido el 09 de diciembre de 19 a las 13:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript date or haz tu propia pregunta.
Esta no es tanto una pregunta de "JavaScript" como una pregunta de "qué API de fecha quiero usar". La parte de JavaScript es muy fácil una vez que haya encontrado una API que determinará qué días de la semana caen en un mes en particular de un año en particular. - natlee75
¿Qué salida esperas para esta fecha? ¿Sábado? - user1432124
Tachar eso... no debería ser demasiado difícil en absoluto... no pensar con claridad tan tarde :-) - natlee75