¿Cómo obtener el día de la semana y el mes del año?

124

No sé mucho sobre Javascript, y las otras preguntas que encontré están relacionadas con operaciones en fechas, no solo para obtener la información que necesito.

Objetivo

Deseo obtener la fecha con el siguiente formato:

Impreso el jueves 27 de enero de 2011 a las 17:42:21

Hasta ahora, obtuve lo siguiente:

var now = new Date();
var h = now.getHours();
var m = now.getMinutes();
var s = now.getSeconds();

h = checkTime(h);
m = checkTime(m);
s = checkTime(s);

var prnDt = "Printed on Thursday, " + now.getDate() + " January " + now.getFullYear() + " at " + h + ":" + m + ":" s;

Ahora necesito saber cómo obtener el día de la semana y el mes del año (sus nombres).

¿Hay una manera simple de hacerlo, o debo considerar el uso de matrices donde simplemente indexaría el valor correcto usando now.getMonth()y now.getDay()?

Will Marcouiller
fuente

Respuestas:

233

Sí, necesitarás matrices.

var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

var day = days[ now.getDay() ];
var month = months[ now.getMonth() ];

O puede usar la biblioteca date.js.


EDITAR:

Si va a utilizarlos con frecuencia, puede ampliar la Date.prototypeaccesibilidad.

(function() {
    var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];

    var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

    Date.prototype.getMonthName = function() {
        return months[ this.getMonth() ];
    };
    Date.prototype.getDayName = function() {
        return days[ this.getDay() ];
    };
})();

var now = new Date();

var day = now.getDayName();
var month = now.getMonthName();
usuario113716
fuente
2
@ Will: De nada. Para su información, si va a hacer esto con frecuencia, podría fácilmente crear prototipos de la funcionalidad en el Dateobjeto. Lo actualizaré en un minuto.
user113716
3
¡Localice sus datos y no hay necesidad de matrices de un solo idioma! selectedLocale = 'en-us'; selectedDate.toLocaleString (selectedLocale, {mes: "largo"});
Ryan Loggerythm
Hice esto justo ahora, pero tuve que usar el lunes como primer elemento de la matriz, no el domingo. Aún así, funciona muy bien.
nrowegt
44
No no no no. Simplemente use la clase de fecha javascript estándar. No hay necesidad de matrices o una biblioteca adicional. Vea mi respuesta: stackoverflow.com/a/50293232/760777
RWC
52

Use la clase de fecha javascript estándar. No hay necesidad de matrices. No hay necesidad de bibliotecas adicionales.

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

var options = {  weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false };
var prnDt = 'Printed on ' + new Date().toLocaleTimeString('en-us', options);

console.log(prnDt);

RWC
fuente
@RWC esto es bueno, pero ¿cómo logro obtener solo el día de la semana sin el resto de la parte de la fecha? IE quiero en saturdaylugar de saturday, 9th february 2019.
Vladimir Nul
44
@Valdimir Nul: var prnDt = 'Impreso en' + nueva Fecha (). ToLocaleDateString ('en-us', {día de la semana: 'largo'}); console.log (prnDt);
RWC
Definitivamente la mejor manera de hacerlo.
Diego Victor de Jesus
@Vladimir Hay un problema con Firefox, el tiempo siempre se muestra, entonces:new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
Bruno L.
8

Una cosa que también puede hacer es extender el objeto de fecha para devolver el día de la semana:

Date.prototype.getWeekDay = function() {
    var weekday = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    return weekday[this.getDay()];
}

por lo tanto, solo puede llamar a date.getWeekDay ();

Pritam Narkhede
fuente
7

Como @ L-Ray ya se ha sugerido, se puede mirar en moment.js así

Muestra

var today = moment();
var result = {
  day: today.format("dddd"),
  month: today.format("MMM")
}

document.write("<pre>" + JSON.stringify(result,0,4) + "</pre>");
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>

Rajesh
fuente
5

Desafortunadamente, el Dateobjeto en JavaScript devuelve información sobre los meses solo en formato numérico. Lo más rápido que puede hacer es crear una serie de meses (¡no se supone que cambien con frecuencia!) Y crear una función que devuelva el nombre en función del número.

Algo como esto:

function getMonthNameByMonthNumber(mm) { 
   var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 

   return months[mm]; 
}

Su código por lo tanto se convierte en:

var prnDt = "Printed on Thursday, " + now.getDate() + " " + getMonthNameByMonthNumber(now.getMonth) + " "+  now.getFullYear() + " at " + h + ":" + m + ":" s;
lucke84
fuente
5
var GetWeekDays = function (format) {
    var weekDays = {};

    var curDate = new Date();
    for (var i = 0; i < 7; ++i) {
        weekDays[curDate.getDay()] = curDate.toLocaleDateString('ru-RU', {
            weekday: format ? format : 'short'
        });

        curDate.setDate(curDate.getDate() + 1);
    }

    return weekDays;
};

me.GetMonthNames = function (format) {
    var monthNames = {};

    var curDate = new Date();
    for (var i = 0; i < 12; ++i) {
        monthNames[curDate.getMonth()] = curDate.toLocaleDateString('ru-RU', {
            month: format ? format : 'long'
        });

        curDate.setMonth(curDate.getMonth() + 1);
    }

    return monthNames;
};
PSS
fuente
ru-RU sería en-US (para inglés americano) o en-GB (para inglés británico).
Sarah
3

De https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

El método toLocaleDateString () devuelve una cadena con una representación sensible al idioma de la parte de fecha de esta fecha. Los nuevos argumentos locales y opciones permiten a las aplicaciones especificar el idioma cuyas convenciones de formato deben usarse y permiten personalizar el comportamiento de la función. En implementaciones anteriores, que ignoran las configuraciones regionales y los argumentos de opciones, la configuración regional utilizada y la forma de la cadena devuelta dependen completamente de la implementación.

Forma larga:

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

Un trazador de líneas:

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

Nota: hay otras opciones de idioma para la configuración regional, pero la que se presenta aquí para inglés de EE. UU.

cambista
fuente
2

Puede mirar datejs que analiza la salida de fecha localizada, por ejemplo.

El formato puede verse así, en su ejemplo:

new Date().toString('dddd, d MMMM yyyy at HH:mm:ss') 
Dan
fuente
1

Así de simple. Puede configurar la opción para mostrar solo los días de la semana en toLocaleDateString () para obtener los nombres. Por ejemplo:

(nueva Fecha ()). toLocaleDateString ('en-US', {día de la semana: 'largo'}) devolverá solo el día de la semana. Y (new Date ()). ToLocaleDateString ('en-US', {month: 'long'}) devolverá solo el mes del año.

Antonio Jha
fuente
0
  function currentDate() {
      var monthNames = [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE",
                     "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ];
      var days = ['SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY'];                       
      var today = new Date();
      var dd   = today.getDate();
      var mm   = monthNames[today.getMonth()]; 
      var yyyy = today.getFullYear();
      var day  = days[today.getDay()];
      today = 'Date is :' + dd + '-' + mm + '-' + yyyy;
      document.write(today +"<br>");
      document.write('Day is : ' + day );
  }
  currentDate();
Anil Kumar
fuente
-1

Escriba la fecha = document.write (Date ());

Ana Gauna
fuente
¿Cómo es esta la solución del problema del OP?
anees