Formate a data do JavaScript como aaaa-mm-dd

382

Eu tenho uma data com o formato Sun May 11,2014. Como posso convertê-lo para o 2014-05-11JavaScript?

function taskDate(dateMilli) {
    var d = (new Date(dateMilli) + '').split(' ');
    d[2] = d[2] + ',';

    return [d[0], d[1], d[2], d[3]].join(' ');
}

var datemilli = Date.parse('Sun May 11,2014');
console.log(taskDate(datemilli));

O código acima me fornece o mesmo formato de data sun may 11,2014,. Como posso consertar isso?

user3625547
fonte
7
Duvido que o código acima ofereça algo além de um erro de sintaxe.
Plalx
Considere realmente usar uma biblioteca como Moment.js. Ele vai formatar no resultado desejado :)
Ankur
5
Por que usar uma biblioteca quando cinco linhas de código podem fazer o trabalho? @Ankur
Black Mamba
Relacionado: O que são seqüências de data e hora válidas em JavaScript? Observe que "Sun May 11,2014" não é uma sequência de datas válida e a análise pode falhar em alguns navegadores.
str

Respostas:

524

Você pode fazer:

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) 
        month = '0' + month;
    if (day.length < 2) 
        day = '0' + day;

    return [year, month, day].join('-');
}

Exemplo de uso:

alert(formatDate('Sun May 11,2014'));

Resultado:

2014-05-11

Demo no JSFiddle: http://jsfiddle.net/abdulrauf6182012/2Frm3/

user3470953
fonte
11
Realmente várias declarações de variáveis ​​na mesma instrução? stackoverflow.com/questions/694102/…
bhspencer
8
@ Fuser97381 Várias declarações de variáveis ​​na mesma instrução são mais do que apenas uma preferência de estilo estético. É uma prática perigosa. Se você inadvertidamente falhar, adicione uma vírgula após cada declaração e acaba criando variáveis ​​globais. Não é algo que deva ser encorajado no que pode se tornar a resposta canônica para uma pergunta.
Bhspencer 31/08/2015
6
'use strict'; @bhspencer
Vix
3
A reformatação de uma sequência de datas não deve depender da análise bem-sucedida de sequências não padrão pelo analisador interno. Dado o formato OP, ele pode ser reformatado em menos código sem usar uma Data.
RobG
Como incrementar mais 30 dias no intervalo de 1 a 31?
Steve Angello
456

Basta aproveitar o toISOStringmétodo interno que leva sua data para o formato ISO 8601:

yourDate.toISOString().split('T')[0]

Onde yourDate é seu objeto de data.

Edit: algum cara escreveu isso para lidar com o fuso horário nos comentários:

const offset = yourDate.getTimezoneOffset()
yourDate = new Date(yourDate.getTime() + (offset*60*1000))
return yourDate.toISOString().split('T')[0]
Darth Egregious
fonte
239
CUIDADO com esse método, pois ele primeiro converte a data em UTC. Se você estiver no fuso horário + e sua parte do tempo for cedo, poderá reverter um dia. Como alternativa, se você estiver em um fuso horário e sua parte do tempo estiver atrasada, poderá avançar um dia.
Luke Baulch 13/09/2015
4
Tente isto:new Date(yourDateStr).toISOString().split('T')[0]
exbuddha 12/02
24
const offset = yourDate.getTimezoneOffset(); yourDate = new Date(yourDate.getTime() + (offset*60*1000)); yourDate.toISOString().split('T')[0] Isto deve resolver o problema de fuso horário
mjwrazor
5
now.toISOString().substring(0,10); Esta é uma alternativa mais limpa, uma vez que lembra que YYYY-MM-DDsão os primeiros caracteres dez do formato completo iso
Gutimore
4
Nota: usando a solução útil comentada por @mjwrazor, eu tive que subtrair em vez de adicionar o deslocamento para obter a data correta (altere + (offsetpara a - (offset)
rococo
135

Eu uso dessa maneira para obter a data no formato aaaa-mm-dd :)

var todayDate = new Date().toISOString().slice(0,10);
Fernando Aguilar
fonte
14
Como você lida com a mudança de data por dia, como mencionado aqui por @Luke_Baulch?
Malvineous 10/09/16
7
Você pode fazer isso: var todayDate = new Date (); todayDate.setMinutes (todayDate.getMinutes () - todayDate.getTimezoneOffset ()); todayDate.toISOString (). slice (0,10); Isso deve ajudar a evitar o problema do UTC.
Fernando Aguilar
11
@FernandoAguilar Uma dúvida, porém, como sabemos que precisamos subtrair o deslocamento ou adicioná-lo?
whyAto8
var todayDate = new Date(2018, 3 - 1, 26); todayDate.toISOString().slice(0, 10);me dá "2018-03-25". Em outro sistema var todayDate = new Date(2018, 3 - 1, 26, 17, 0, 0); todayDate.toISOString().slice(0, 10);me dá "2018-03-27".
Salman A
2
Nem sempre funciona. Às vezes, subtrai um dia devido à conversão do UTC.
NickG 22/05/19
110

A maneira mais simples de converter sua data para o formato aaaa-mm-dd, é fazer o seguinte:

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

Como funciona:

  • new Date("Sun May 11,2014")converte a sequência "Sun May 11,2014"em um objeto de data que representa a hora Sun May 11 2014 00:00:00em um fuso horário com base na localidade atual (configurações do sistema host)
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))converte sua data em um objeto de data que corresponde à hora Sun May 11 2014 00:00:00no UTC (hora padrão) subtraindo o deslocamento do fuso horário
  • .toISOString() converte o objeto de data em uma string ISO 8601 2014-05-11T00:00:00.000Z
  • .split("T") divide a string em array ["2014-05-11", "00:00:00.000Z"]
  • [0] pega o primeiro elemento dessa matriz

Demo

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

console.log(dateString);

John Slegers
fonte
20
Ninguém mais está horrorizado que esta seja a maneira mais simples?
gap
.toISOString () não funciona corretamente com horário de verão.
Idéias de Joe
2
@ JoeDevmon: Não vejo como isso é relevante aqui. O - (date.getTimezoneOffset() * 60000 )bit deve eliminar as diferenças de fuso horário, incluindo o impacto do horário de verão.
John Slegers
2
@JohnSlegers era o que eu estava pensando, mas ainda estava recebendo o dia anterior em alguns casos. Refatorei e seu exemplo funciona agora. Eu devo ter tido uma data estranha ou algo assim. Obrigado por continuar e apontar isso. +1 👍
Ideias de Joe
2
Pesquisei alta e baixa em SO e em outros sites para encontrar a melhor maneira de lidar com problemas de fuso horário com datas em JS e, sem dúvida, essa é de longe a mais fácil e a melhor. Obrigado!
HartleySan
34
format = function date2str(x, y) {
    var z = {
        M: x.getMonth() + 1,
        d: x.getDate(),
        h: x.getHours(),
        m: x.getMinutes(),
        s: x.getSeconds()
    };
    y = y.replace(/(M+|d+|h+|m+|s+)/g, function(v) {
        return ((v.length > 1 ? "0" : "") + eval('z.' + v.slice(-1))).slice(-2)
    });

    return y.replace(/(y+)/g, function(v) {
        return x.getFullYear().toString().slice(-v.length)
    });
}

Resultado:

format(new Date('Sun May 11,2014'), 'yyyy-MM-dd')
"2014-05-11
orangleliu
fonte
11
Eu gosto da flexibilidade adicional que esta solução fornece sobre as outras respostas a esta pergunta. Não testei completamente isso, mas para o formato que eu desejava (por exemplo, "aaaa-MM-dd hh: mm: ss"), funciona da maneira esperada.
porcus
3
Você poderia evitar tudo facilmente eval.
Salman A
3
aqui está uma versão que evita o eval e comentários melhor jsfiddle.net/8904cmLd/2
m1m1k
2
Eu me beneficiei dessa resposta. Eu substituí essa linha pela declaração eval parareturn ((v.length > 1 ? "0" : "") + z[v.slice(-1)]).slice(-2);
JesusIsMyDriver.dll 10/10
26

Uma combinação de algumas das respostas:

var d = new Date(date);
date = [
  d.getFullYear(),
  ('0' + (d.getMonth() + 1)).slice(-2),
  ('0' + d.getDate()).slice(-2)
].join('-');
aqwsez
fonte
Eu gosto da solução da melhor maneira - fácil de ler e não depende, toISOString()e as possíveis falhas de fuso horário com o uso dessa função.
matt.fc 12/05/19
este é o primeiro que não faz meu cérebro doer.
ckapilla 12/04
22

Se você não tem nada contra o uso de bibliotecas, basta usar a biblioteca Moments.js da seguinte forma:

var now = new Date();
var dateString = moment(now).format('YYYY-MM-DD');

var dateStringWithTime = moment(now).format('YYYY-MM-DD HH:mm:ss');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Nifemi Sola-Ojo
fonte
Solução legal, mas é um pacote de 300kb
Adam
13

Simplesmente use isto:

var date = new Date('1970-01-01'); // Or your date here
console.log((date.getMonth() + 1) + '/' + date.getDate() + '/' +  date.getFullYear());

Simples e doce;)

Pardeep Jain
fonte
4
o preenchimento não existe para o formato de 2 letras. mostrará um dígito se a data ou o mês for menor que 10, por isso não será possível usá-lo diretamente.
precisa saber é o seguinte
sim, mas isso pode ser conseguido simplesmente usando javascript, é totalmente sua exigência, acho que sim, não é? @YatenderSingh
Pardeep Jain
4
sim correto, mas verificar o título de pergunta "aaaa-mm-dd" formato que quiser :)
Yatender Singh
var old_date = nova data (data); var new_date = old_date.getFullYear () + '-' + (old_date.getMonth () + 1) + '-' + old_date.getDate ()
Sitti Munirah Abdul Razak
11
Ótimo. Funcionou e foi simples e conciso!
Waleed93 23/04
12

toISOString()assume que sua data é hora local e a converte em UTC. Você receberá uma sequência de datas incorreta.

O método a seguir deve retornar o que você precisa.

Date.prototype.yyyymmdd = function() {         

    var yyyy = this.getFullYear().toString();                                    
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based         
    var dd  = this.getDate().toString();             

    return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};

Fonte: https://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/

user1920925
fonte
9

Recupere ano, mês e dia e depois junte-os. Direto, simples e preciso.

function formatDate(date) {
    var year = date.getFullYear().toString();
    var month = (date.getMonth() + 101).toString().substring(1);
    var day = (date.getDate() + 100).toString().substring(1);
    return year + "-" + month + "-" + day;
}

//Usage example:
alert(formatDate(new Date()));

Luo Jiong Hui
fonte
9

Você pode usar toLocaleDateString('fr-CA')no Dateobjeto

console.log(new Date('Sun May 11,2014').toLocaleDateString('fr-CA'));

Também descobri que esses locais dão o resultado correto nessa lista de locais. Lista de todos os locais e seus códigos de acesso?

'en-CA'
'fr-CA'
'lt-LT'
'sv-FI'
'sv-SE'

Aleksandr Belugin
fonte
Alguma idéia de por que isso funciona? O formato ISO é apenas o padrão ou esses locais realmente usam esse formato? Se for o primeiro, eu ficaria preocupado que isso pudesse mudar inesperadamente no futuro.
jymbob 25/02
Isso não está funcionando com o NodeJS fora do navegador.
Donato
@ jymbob Eu acho que esses locais realmente usam esses formatos. Cheguei à mesma resposta
consultando
5

Para considerar também o fuso horário, esse one-liner deve ser bom sem nenhuma biblioteca:

new Date().toLocaleString("en-IN", {timeZone: "Asia/Kolkata"}).split(',')[0]
krsoni
fonte
5

Você pode tentar isso: https://www.npmjs.com/package/timesolver

npm i timesolver

Use-o no seu código:

const timeSolver = require('timeSolver');
const date = new Date();
const dateString = timeSolver.getString(date, "YYYY-MM-DD");

Você pode obter a sequência de datas usando este método:

getString
sean1093
fonte
4

Nenhuma dessas respostas me satisfez. Eu queria uma solução de plataforma cruzada que me desse o dia no fuso horário local sem usar nenhuma biblioteca externa.

Isto é o que eu vim com:

function localDay(time) {
  var minutesOffset = time.getTimezoneOffset()
  var millisecondsOffset = minutesOffset*60*1000
  var local = new Date(time - millisecondsOffset)
  return local.toISOString().substr(0, 10)
}

Isso deve retornar o dia da data, no formato AAAA-MM-DD, no fuso horário em que a data faz referência.

Então, por exemplo, localDay(new Date("2017-08-24T03:29:22.099Z"))retornará"2017-08-23" mesmo que já seja o 24º no UTC.

Você precisará preencher novamente o Date.prototype.toISOString para que ele funcione no Internet Explorer 8, mas deve ser suportado em qualquer outro lugar.

Erik Pukinskis
fonte
Talvez valha a pena notar que isso só lhe dará 23-08-2017 se você estiver atrasado o suficiente na UTC (por exemplo, nos EUA).
Simon D
3

Sugiro usar algo como formatDate-js em vez de tentar replicá-lo sempre. Basta usar uma biblioteca que suporte todas as principais ações de tempo de strft.

new Date().format("%Y-%m-%d")
Michael Baldry
fonte
3
new Date().toLocaleDateString('pt-br').split( '/' ).reverse( ).join( '-' );

ou

new Date().toISOString().split('T')[0]
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString()
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString().split('T')[0]

Tente isso!

Williaan Lopes
fonte
A segunda opção pode exibir a data errada, pois exibirá os dados no fuso horário UTC.
Ever Dev
2

Aqui está uma maneira de fazer isso:

var date = Date.parse('Sun May 11,2014');

function format(date) {
  date = new Date(date);

  var day = ('0' + date.getDate()).slice(-2);
  var month = ('0' + (date.getMonth() + 1)).slice(-2);
  var year = date.getFullYear();

  return year + '-' + month + '-' + day;
}

console.log(format(date));
Gergo Erdosi
fonte
2

Date.js é ótimo para isso.

require("datejs")
(new Date()).toString("yyyy-MM-dd")
Tan Wang
fonte
1

function myYmd(D){
    var pad = function(num) {
        var s = '0' + num;
        return s.substr(s.length - 2);
    }
    var Result = D.getFullYear() + '-' + pad((D.getMonth() + 1)) + '-' + pad(D.getDate());
    return Result;
}

var datemilli = new Date('Sun May 11,2014');
document.write(myYmd(datemilli));

Andrei
fonte
1

var d = new Date("Sun May 1,2014");

var year  = d.getFullYear();
var month = d.getMonth() + 1;
var day   = d.getDate(); 

month = checkZero(month);             
day   = checkZero(day);

var date = "";

date += year;
date += "-";
date += month;
date += "-";
date += day;

document.querySelector("#display").innerHTML = date;
    
function checkZero(i) 
{
    if (i < 10) 
    {
        i = "0" + i
    };  // add zero in front of numbers < 10

    return i;
}
<div id="display"></div>

antelove
fonte
1
new Date(new Date(YOUR_DATE.toISOString()).getTime() - 
                 (YOUR_DATE.getTimezoneOffset() * 60 * 1000)).toISOString().substr(0, 10)
Lin
fonte
1

Algumas das respostas anteriores foram boas, mas não eram muito flexíveis. Eu queria algo que realmente pudesse lidar com mais casos extremos, então peguei a resposta de @orangleliu e a expandi. https://jsfiddle.net/8904cmLd/1/

function DateToString(inDate, formatString) {
    // Written by m1m1k 2018-04-05

    // Validate that we're working with a date
    if(!isValidDate(inDate))
    {
        inDate = new Date(inDate);
    }

    // See the jsFiddle for extra code to be able to use DateToString('Sun May 11,2014', 'USA');
    //formatString = CountryCodeToDateFormat(formatString);

    var dateObject = {
        M: inDate.getMonth() + 1,
        d: inDate.getDate(),
        D: inDate.getDate(),
        h: inDate.getHours(),
        m: inDate.getMinutes(),
        s: inDate.getSeconds(),
        y: inDate.getFullYear(),
        Y: inDate.getFullYear()
    };

    // Build Regex Dynamically based on the list above.
    // It should end up with something like this: "/([Yy]+|M+|[Dd]+|h+|m+|s+)/g"
    var dateMatchRegex = joinObj(dateObject, "+|") + "+";
    var regEx = new RegExp(dateMatchRegex,"g");
    formatString = formatString.replace(regEx, function(formatToken) {
        var datePartValue = dateObject[formatToken.slice(-1)];
        var tokenLength = formatToken.length;

        // A conflict exists between specifying 'd' for no zero pad -> expand
        // to '10' and specifying yy for just two year digits '01' instead
        // of '2001'.  One expands, the other contracts.
        //
        // So Constrict Years but Expand All Else
        if (formatToken.indexOf('y') < 0 && formatToken.indexOf('Y') < 0)
        {
            // Expand single digit format token 'd' to
            // multi digit value '10' when needed
            var tokenLength = Math.max(formatToken.length, datePartValue.toString().length);
        }
        var zeroPad = (datePartValue.toString().length < formatToken.length ? "0".repeat(tokenLength) : "");
        return (zeroPad + datePartValue).slice(-tokenLength);
    });

    return formatString;
}

Exemplo de uso:

DateToString('Sun May 11,2014', 'MM/DD/yy');
DateToString('Sun May 11,2014', 'yyyy.MM.dd');
DateToString(new Date('Sun Dec 11,2014'),'yy-M-d');
m1m1k
fonte
Solução limpa e comentada agradável. No entanto, sou cético em relação ao primeiro argumento, que é silenciosamente substituído por uma nova data nova, se não for reconhecida como uma data válida. Prefiro colocar esse "valor padrão opcional" como o segundo argumento e retornar algum tipo de exceção (poderia ser uma string retornada "Formato de data inválido" simples) caso o formato não seja reconhecido, para que o erro apareça claramente como o testador / usuário
Balmipour 16/10/19
1

Isso funcionou para obter a data atual no formato desejado (AAAAMMDD HH: MM: SS):

var d = new Date();

var date1 = d.getFullYear() + '' +
            ((d.getMonth()+1) < 10 ? "0" + (d.getMonth() + 1) : (d.getMonth() + 1)) +
            '' +
            (d.getDate() < 10 ? "0" + d.getDate() : d.getDate());

var time1 = (d.getHours() < 10 ? "0" + d.getHours() : d.getHours()) +
            ':' +
            (d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes()) +
            ':' +
            (d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds());

print(date1+' '+time1);
Seiva
fonte
1

Nenhuma biblioteca é necessária

Apenas JavaScript puro.

O exemplo abaixo recebe os últimos dois meses a partir de hoje:

var d = new Date()
d.setMonth(d.getMonth() - 2);
var dateString = new Date(d);
console.log('Before Format', dateString, 'After format', dateString.toISOString().slice(0,10))

Panayiotis Georgiou
fonte
Perigoso. Nesse caso, você ignora o deslocamento do fuso horário.
precisa saber é o seguinte
1

Formato de data compatível com PHP

Aqui está uma pequena função que pode usar os mesmos parâmetros que a função PHP date()e retornar uma string de data / hora em JavaScript.

Observe que nem todas as opções de formato date () do PHP são suportadas. Você pode estender o partsobjeto para criar o token de formato ausente

/**
 * Date formatter with PHP "date()"-compatible format syntax.
 */
const formatDate = (format, date) => {
  if (!format) { format = 'Y-m-d' }
  if (!date) { date = new Date() }

  const parts = {
    Y: date.getFullYear().toString(),
    y: ('00' + (date.getYear() - 100)).toString().slice(-2),
    m: ('0' + (date.getMonth() + 1)).toString().slice(-2),
    n: (date.getMonth() + 1).toString(),
    d: ('0' + date.getDate()).toString().slice(-2),
    j: date.getDate().toString(),
    H: ('0' + date.getHours()).toString().slice(-2),
    G: date.getHours().toString(),
    i: ('0' + date.getMinutes()).toString().slice(-2),
    s: ('0' + date.getSeconds()).toString().slice(-2)
  }

  const modifiers = Object.keys(parts).join('')
  const reDate = new RegExp('(?<!\\\\)[' + modifiers + ']', 'g')
  const reEscape = new RegExp('\\\\([' + modifiers + '])', 'g')

  return format
    .replace(reDate, $0 => parts[$0])
    .replace(reEscape, ($0, $1) => $1)
}

// ----- EXAMPLES -----
console.log( formatDate() ); // "2019-05-21"
console.log( formatDate('H:i:s') ); // "16:21:32"
console.log( formatDate('Y-m-d, o\\n H:i:s') ); // "2019-05-21, on 16:21:32"
console.log( formatDate('Y-m-d', new Date(2000000000000)) ); // "2033-05-18"

Essência

Aqui está uma lista com uma versão atualizada da formatDate()função e exemplos adicionais: https://gist.github.com/stracker-phil/c7b68ea0b1d5bbb97af0a6a3dc66e0d9

Philipp
fonte
0

Mais uma combinação de respostas. Bem legível, mas um pouco demorado.

function getCurrentDayTimestamp() {
  const d = new Date();

  return new Date(
    Date.UTC(
      d.getFullYear(),
      d.getMonth(),
      d.getDate(),
      d.getHours(),
      d.getMinutes(),
      d.getSeconds()
    )
  // `toIsoString` returns something like "2017-08-22T08:32:32.847Z"
  // and we want the first part ("2017-08-22")
  ).toISOString().slice(0, 10);
}
kadrian
fonte
0

Se a data precisar ser a mesma em todos os fusos horários, por exemplo, representar algum valor do banco de dados, use versões UTC do dia, mês, funções totalmente disponíveis no objeto de data JavaScript, pois isso será exibido na hora UTC e evite erros pontuais em determinados fusos horários.

Melhor ainda, use a biblioteca de datas Moment.js para esse tipo de formatação.

GameSalutes
fonte
0

Eu modifiquei a resposta de Samit Satpute da seguinte forma:

var newstartDate = new Date();
// newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().replace(/[-T:\.Z]/g, ""); //.slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
console.log(startDate);

suleman
fonte
0

Formate e localize a data máxima e mínima dos dados do hashmap:

var obj = {"a":'2001-15-01', "b": '2001-12-02' , "c": '2001-1-03'};

function findMaxMinDate(obj){
  let formatEncode = (id)=> { let s = id.split('-'); return `${s[0]+'-'+s[2]+'-'+s[1]}`}
  let formatDecode = (id)=> { let s = id.split('/'); return `${s[2]+'-'+s[0]+'-'+s[1]}`}
  let arr = Object.keys( obj ).map(( key )=> { return new Date(formatEncode(obj[key])); });
  let min = new Date(Math.min.apply(null, arr)).toLocaleDateString();
  let max = new Date(Math.max.apply(null, arr)).toLocaleDateString();
  return {maxd: `${formatDecode(max)}`, mind:`${formatDecode(min)}`}
}

console.log(findMaxMinDate(obj));

KARTHIKEYAN.A
fonte
Como isso está relacionado à pergunta (formatação de uma data)?
Peter Mortensen
0

A reformatação de uma sequência de datas é bastante simples, por exemplo,

var s = 'Sun May 11,2014';

function reformatDate(s) {
  function z(n){return ('0' + n).slice(-2)}
  var months = [,'jan','feb','mar','apr','may','jun',
                 'jul','aug','sep','oct','nov','dec'];
  var b = s.split(/\W+/);
  return b[3] + '-' +
    z(months.indexOf(b[1].substr(0,3).toLowerCase())) + '-' +
    z(b[2]);
}

console.log(reformatDate(s));

RobG
fonte