¿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()?

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();

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 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 ();


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>


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;

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;
};

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.


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') 

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.


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();

-1

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


¿Cómo es esta la solución del problema del OP?
anees
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.