Formatar datas JS

Eu preciso mostrar a data no formato: 25 Dec 2011 12:35
Mas não tô conseguindo 2 coisas:

  • colocar o mês certo (pq janeiro é 0), sem usar uma variavel e incrementar. tem como? pq qnd eu tento incrementar direto nesse out, dá 51 SEMPRE
  • colocar o mês como string (jan dec, etc) - Preciso usar um switch pra isso? Q solução feia

Podem ajudar aqui?

Minha saída atual é 27 5 2017 17:24

<!DOCTYPE html>
<html> 
<head>
	<title>Testes</title>
<style>p {font: 14px normal arial, verdana, helvetica;}</style>
<script>
function telltime() {
	//25 Dec 2011 12:35
	var out = "";
	var now = new Date();
	out += now.getDate() + ' ' + now.getMonth() + ' ' + now.getFullYear() + ' ' + now.getHours() + ':' + now.getMinutes();
	document.getElementById('div1').innerHTML = out;

	}
	</script> 	
</head>
<body> 
	<p>The Current Date and Time are:</p><br>
	<div id="div1"></div>
	<script>
		telltime();
	</script>
	<br>
	<input type="button" onclick="location.reload()" value="Refresh" />

</body> 
</html>

Dá uma olhada nas formatações neste link: Format Date JS

1 curtida

O seu problema é que o sinal de + aqui está sendo usado para concatenar strings, entao se você tenta adicionar 1 no mês vai ocorrer uma concatenaçao (51) ao invés de uma soma (6).
Uma soluçao seria você calcular o mês antes:

var mes = now.getMonth() + 1;
out += // aqui usa mes ao invés de now.getMonth()

De maneira geral nao recomendo trabalhar com datas assim em js. Procure uma biblioteca que manipule esse tipo de coisa que vai facilitar muito sua vida. A Moment.js é uma delas, por exemplo.

2 curtidas

brigada. já tinha dado uma olhada, mas não entendi como ter a data atual com o formato long

long date:
var d = new Date(“Jan 25 2015”);

Só que eu não quero passar uma data, quero a data atual (new Date()) no formato long date. Ainda não consegui aqui

Olá bom dia,

o que acontece é que o javascript não tem um método que retorne o valor do nome do mês, ele apenas retorna o valor como um inteiro, o que nos dá duas possibilidades:

Criar um array, contendo o nome dos meses do ano e associando o valor de now.getMonth() ao array, assim, retornando o nome equivalente.

Ou a segunda, que eu acho mais legal, porém mais “perigosa”, seria adicionar a função Date, um método getMonthNames(), através de protótipos. Digo “perigosa”, porque estamos modificando um Objeto global, por isso, quem não conhece seu código pode não estar sabendo disso, e não especificamente nesse caso, mas essa modificação pode mudar o comportamento esperado, por quem está pegando seu código. Isso se aplicaria mais para projetos open source. Dentro das empresas isso é algo comum, pois “existem” :joy: documentações para esses casos.

Sobre a questão dos formatos, seria em relação a entrada na função e não a saída. Você pode ter N formatos de entrada, mas apenas um formato de saída Thu Jun 29 2017 07:04:41 GMT-0300 (BRT) os métodos apenas te auxiliam trazendo todos os valores dessa saída. Por isso que now.getMonth() sempre vai retornar 5, porque Janeiro sendo o primeiro é 0.

Ex:

var monthNames = [..., 'Jun', ...]
console.log(monthNames[now.getMonth()]) => ?

Date.prototype.getMonthName = function() {
  var monthsNames = [..., 'Jun', ...]
  // Aqui, como estou dentro da função Date, 
  // tenho acesso ao int do mês, através 
  // da propriedade this
  return monthsNames[this.getMonth()]
}

console.log(now.getMonthName()) => ?

Dá uma lida depois:
http://www.ecma-international.org/ecma-262/7.0/#sec-date-constructor
http://www.ecma-international.org/ecma-262/7.0/#sec-month-number
http://www.ecma-international.org/ecma-262/7.0/#sec-properties-of-the-date-prototype-object

1 curtida

eita, brigada. vou dar uma lida e refazer

De nada :joy:
JS é uma linguagem muito legal. Tem muita coisa pra aprender :sweat_smile:

Qualquer coisa chama ae