Como obter o dia da semana e o mês do ano?

Eu não sei muito sobre Javascript, e as outras perguntas que encontrei estão relacionadas a operações em datas, não apenas obtendo as informações como eu preciso.

Objetivo

Desejo obter a data como abaixo formatada:

Impresso na quinta-feira, 27 de janeiro de 2011, 17:42:21

Até agora, eu tenho o seguinte:

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; 

Agora preciso saber como obter o dia da semana e o mês do ano (seus nomes).

Existe uma maneira simples de fazê-lo, ou devo considerar o uso de matrizes onde eu simplesmente now.getMonth() para o valor correto usando now.getMonth() e now.getDay() ?

Sim, você precisará de matrizes.

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

Ou você pode usar a biblioteca date.js.


EDITAR:

Se você for usá-los com frequência, talvez queira estender o Date.prototype para acessibilidade.

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

Como o @ L-Ray já sugeriu, você também pode ver o moment.js

Amostra

 var today = moment(); var result = { day: today.format("dddd"), month: today.format("MMM") } document.write("
" + JSON.stringify(result,0,4) + "

");

  

Infelizmente, o object Date em javascript retorna informações sobre meses apenas no formato numérico. A coisa mais rápida que você pode fazer é criar uma matriz de meses (eles não devem mudar com freqüência!) E criar uma function que retorna o nome com base no número.

Algo assim:

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

Seu código, portanto, se torna:

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

Uma coisa que você também pode fazer é estender o object de data para retornar o dia da semana por:

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

então, você só pode chamar date.getWeekDay ();

Use a class de data padrão do javascript. Não há necessidade de matrizes. Não há necessidade de bibliotecas extras.

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

Usando http://phrogz.net/JS/FormatDateTime_JS.txt você pode apenas:

 var now = new Date; var prnDt = now.customFormat( "Printed on #DDDD#, #D# #MMMM# #YYYY# at #hhh#:#mm#:#ss#" ); 
 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; }; 

Você pode olhar para datejs, que analisa a saída de data localizada, por exemplo.

A formatação pode ser assim, no seu exemplo:

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