Nombre del día desde la fecha en JS

82

Necesito mostrar el nombre del día dado una fecha (como "05/23/2014") que obtengo de un tercero.

He intentado usar Date, pero solo obtengo la fecha.

¿Cuál es la forma correcta de obtener el nombre del día?

DhrubaJyoti
fuente
conviértalo en una fecha, luego llame getDay()para obtener el número del día (0-6, 0 == domingo), y luego use una matriz de los nombres de los días para asignar el número al nombre.
perdonanson

Respuestas:

122

Puede usar el Date.getDay()método, que devuelve 0 para el domingo, hasta 6 para el sábado. Entonces, podría simplemente crear una matriz con el nombre de los nombres de los días:

var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var d = new Date(dateString);
var dayName = days[d.getDay()];

Aquí dateStringestá la cadena que recibió de la API de terceros.

Alternativamente, si desea las primeras 3 letras del nombre del día, puede usar el método Dateintegrado del objeto toString:

var d = new Date(dateString);
var dayName = d.toString().split(' ')[0];

Eso tomará la primera palabra en la d.toString()salida, que será el nombre del día de 3 letras.

Joeytje50
fuente
14
Probablemente esta NO sea la mejor manera de hacerlo. La clase estándar de fecha de Javascript proporciona formas de obtener el nombre completo. Eche un vistazo a mi respuesta.
RWC
Pero ... la "clase de fecha estándar de Javascript" no funciona en todos los navegadores.
Hernán Eche
@ HernánEche según developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… todos los navegadores soportan Date perfectamente. ¿Qué navegador no te funciona?
Joeytje50
@ Joeytje50 WebView de JavaFx, pero bueno, no califica como 'navegador'
Hernán Eche
@ HernánEche JavaFx, hasta donde puedo encontrar en Internet, es Java, no JavaScript. Estos lenguajes son completamente diferentes, por lo que debería intentar buscar cosas relacionadas con Java. Consulte thesoftwareguild.com/faq/difference-between-java-and-javascript (o cualquier otro resultado en Google en "diferencia entre java y javascript") para obtener más información al respecto.
Joeytje50
172

Ahum, tres años después ...

¿Por qué nadie usa los métodos proporcionados por la clase Date estándar de javascript (excepto Callum Linington)?

Ver https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

Obtener el nombre del día a partir de una fecha :

function getDayName(dateStr, locale)
{
    var date = new Date(dateStr);
    return date.toLocaleDateString(locale, { weekday: 'long' });        
}

var dateStr = '05/23/2014';
var day = getDayName(dateStr, "nl-NL"); // Gives back 'Vrijdag' which is Dutch for Friday.

Obtener todos los días de la semana en una matriz:

function getWeekDays(locale)
{
    var baseDate = new Date(Date.UTC(2017, 0, 2)); // just a Monday
    var weekDays = [];
    for(i = 0; i < 7; i++)
    {       
        weekDays.push(baseDate.toLocaleDateString(locale, { weekday: 'long' }));
        baseDate.setDate(baseDate.getDate() + 1);       
    }
    return weekDays;
}

var weekDays = getWeekDays('nl-NL'); // Gives back { 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag', 'zondag'} which are the days of the week in Dutch.

Para las fechas estadounidenses, use 'en-US' como configuración regional.

RWC
fuente
2
No tenía conocimiento de la existencia de este método en el momento de publicar mi solución. Muy buena solución de hecho. También es bueno que esto proporcione directamente la internacionalización. Además, es bueno aprender algo nuevo: P
Joeytje50
1
Una posible razón por la que algunas personas pueden no usarlo es porque, según la página a la que se vinculó, parece que no hay compatibilidad total con las configuraciones regionales en las plataformas móviles.
John
@John Jun: Cierto. Actualmente, la mayoría de los navegadores en dispositivos móviles lo admiten. Lo más notable es que el navegador de Android predeterminado no lo hace. Chrome en Android lo hace. (Se recomienda usar Chrome en Android de todos modos. Discusión diferente.)
RWC
Solo funciona parcialmente en IE10. Se reconoce el día de la semana pero siempre devuelve el nombre largo, incluso si especifico 'corto'. "corto" funciona en Chrome. Además, IE10 no reconoce la palabra clave 'mes'. Solo devuelve una fecha, como 'Thu Jan 1 1970' cuando se usa con 'long', mientras que Chrome devuelve los nombres largos de los meses.
Larphoid
Mmm, déjame reformular eso. Después de un poco más de manipulación, IE10 no parece molestarse con nada que especifique, ni siquiera con la configuración regional. Siempre devuelve una fecha completa con nombres largos de acuerdo con la configuración regional del sistema operativo.
Larphoid
19
let weekday = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][new Date().getDay()]
Alexandre Vieira
fuente
17

use el método Date.toLocaleString ():

new Date(dateString).toLocaleString('en-us', {weekday:'long'})
iamnox
fuente
9
var days = [
    "Sunday",
    "Monday",
    "...", //etc
    "Saturday"
];

console.log(days[new Date().getDay()]);

Simple, lea el objeto Date en el manual de JavaScript

Para hacer otras cosas con la fecha, como obtener una cadena legible, uso:

var d = new Date();
d.toLocaleString();

Si solo desea la hora o la fecha, use:

d.toLocaleTimeString();
d.toLocaleDateString();

Puede analizar las fechas haciendo lo siguiente:

var d = new Date(dateToParse);

o

var d = Date.parse(dateToParse);
Callum Linington
fuente
days [Date.now (). getDay () es incorrecto porque Date.now () devuelve un número, no una fecha.
tronman
debería serdays[new Date().getDay()]
Callum Linington
3

Mira esto :

var event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };

console.log(event.toLocaleDateString('de-DE', options));
// expected output: Donnerstag, 20. Dezember 2012

console.log(event.toLocaleDateString('ar-EG', options));
// expected output: الخميس، ٢٠ ديسمبر، ٢٠١٢

console.log(event.toLocaleDateString('ko-KR', options));
// expected output: 2012년 12월 20일 목요일

Fuente: Mozilla Doc

Boris Detry
fuente
3

La forma más fácil y sencilla:

var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var dayName = days[new Date().getDay()];
Galleta de la fortuna
fuente
2

No soy fanático de las soluciones demasiado complicadas si a alguien más se le ocurre algo mejor, háganoslo saber :)

any-name.js

var today = new Date().toLocaleDateString(undefined, {
    day: '2-digit',
    month: '2-digit',
    year: 'numeric',
    weekday: 'long'
});
any-name.html
<script>
    document.write(today);
</script>
Edgar Kelevra
fuente
1

puedes usar un objeto

var days = {
   'Mon': 'Monday',
   'etc..': 'etc..',
   'Fri': 'Friday'
}

var date = new Date().toString().split(' ')[0]; //get day abreviation first
console.log(days[date]);
Luis C
fuente
1

Intente usar este código:

var event = new Date();
var options = { weekday: 'long' };
console.log(event.toLocaleDateString('en-US', options));

esto le dará el nombre del día en formato de cadena.

hardik patel
fuente
1
Una solución con toLocaleString se publicó 2 años antes, ¿por qué se necesita esta respuesta?
RobG
1

Solución No.1

var today = new Date();

  var day = today.getDay();

  var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

  var dayname = days[day];

  document.write(dayname);

Solución no 2

      var today = new Date();

  var day = today.getDay();

  switch(day){
    case 0:
    day = "Sunday";
    break;

    case 1:
    day = "Monday";
    break;

    case 2:
    day ="Tuesday";
    break;

    case 3:
    day = "Wednesday";
    break;

    case 4:
    day = "Thrusday";
    break;

    case 5:
    day = "Friday";
    break;

    case 6:
    day = "Saturday";
    break;
  }


document.write(day);
Aravind Chaudhary
fuente
1

Un trazador de líneas más corto

Cambie el día UTC de 6 a 5 si desea que Array comience desde el domingo.

const getWeekDays = (locale) => [...Array(7).keys()].map((v)=>new Date(Date.UTC(1970, 0, 6+v)).toLocaleDateString(locale, { weekday: 'long' }));

console.log(getWeekDays('de-DE')); 

pollos
fuente
0

Solo utilícelo:

function getWeekDayNames(format = 'short', locale = 'ru') {
  const names = [];
  const date = new Date('2020-05-24');
  let days = 7;

  while (days !== 0) {
    date.setDate(date.getDate() + 1);
    names.push(date.toLocaleDateString(locale, { weekday: format }));
    days--;
  }

  return names;
}

Acerca de los formatos que puede leer aquí Documentación DateTimeFormat

Alejandro Zakusilo
fuente
0

Solución de una línea:

const day = ["sunday","monday","tuesday","wednesday","thursday","friday","saturday"][new Date().getDay()]
Marc Dubois
fuente
-1

No es el mejor método, use una matriz en su lugar. Este es solo un método alternativo.

http://www.w3schools.com/jsref/jsref_getday.asp

var date = new Date();
var day = date.getDay();

Realmente deberías usar Google antes de publicar aquí.

Dado que otras personas publicaron el método de matriz, le mostraré una forma alternativa utilizando una declaración de cambio.

switch(day) {
    case 0:
        day = "Sunday";
        break;
    case 1:
        day = "Monday";
        break;

    ... rest of cases

    default:
        // do something
        break;
}

Lo anterior funciona, sin embargo, la matriz es la mejor alternativa. También puede usar if()declaraciones, sin embargo, una declaración de cambio sería mucho más limpia que varios if.

Nicolas
fuente
1
Esto devolverá un valor numérico de 0 a 6, no el día de la semana.
Casey Falk
Puede manejarlo desde allí y convertirlo en un día.
Nicolas
1
Eso es verdad. Solo le hago saber que esto no responde a la pregunta de OP tal como está escrita.
Casey Falk
switch¿ A ? ¿Por qué usarías un en switchlugar de un simple Array? Quiero decir, supongo que es una alternativa a las otras respuestas ... Pero santo tiempo de escritura, Batman ...: /
Casey Falk
Porque ¿por qué publicar lo mismo que otras 2 personas?
Nicolas