Converter um texto para uma data em JavaScript

Como posso converter uma string para uma data em JavaScript?

var st = "date in some format"
var dt = new date();

var dt_st= //st in date format same as dt
Author: DavidRR, 2011-04-11

29 answers

O melhor formato de texto para o processamento de texto é o formato ISO da data em conjunto com o construtor de objectos de data JavaScript.

Exemplos de formato ISO: YYYY-MM-DD ou YYYY-MM-DDTHH:MM:SS.

Mas espera!{[13] } só de usar o "formato ISO" não funciona de forma fiável por si só. String é às vezes tratada como UTC e às vezes como localtime (baseado no fornecedor de navegador e versão). A melhor prática deve ser sempre armazenar datas como UTC e fazer cálculos como UTC.

Para analisar uma data como UTC, adicione a Z - por exemplo: new Date('2011-04-11T10:20:30Z').

Para mostrar uma data em UTC, use .toUTCString(),
para mostrar uma data na hora local do utilizador, use .toString().

Mais informações sobre MDN / Date e esta resposta .

Para a compatibilidade com o Internet Explorer (ou seja, as versões inferiores a 9 não suportam o formato ISO no construtor de datas), você deve dividir a representação de string datetime para as suas partes e então você pode usar o construtor usando as partes datetime, por exemplo: new Date('2011', '04' - 1, '11', '11', '51', '00'). Note - se que o o número do mês deve ser 1 a menos.


Método alternativo-utilizar uma biblioteca apropriada:

Também podes aproveitar o momento da biblioteca.js que permite analisar a data com o fuso-horário indicado.
 579
Author: Pavel Hodek, 2017-05-23 12:34:51
Infelizmente descobri que ...

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

Devolve "Wed Abr 02 2014". Sei que parece loucura, mas acontece a alguns utilizadores.

A solução à prova de balaé a seguinte:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());
 176
Author: Roman Podlinov, 2018-01-17 15:25:10
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

E a saída será:

dt => Date {Fri Apr 26 2013}
 98
Author: serega386, 2014-04-04 05:20:53
function stringToDate(_date,_format,_delimiter)
{
            var formatLowerCase=_format.toLowerCase();
            var formatItems=formatLowerCase.split(_delimiter);
            var dateItems=_date.split(_delimiter);
            var monthIndex=formatItems.indexOf("mm");
            var dayIndex=formatItems.indexOf("dd");
            var yearIndex=formatItems.indexOf("yyyy");
            var month=parseInt(dateItems[monthIndex]);
            month-=1;
            var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
            return formatedDate;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
 65
Author: Kassem, 2014-09-21 17:28:21

Passe - o como argumento até à data ():

var st = "date in some format"
var dt = new Date(st);

Você pode acessar a data, mês, ano usando, por exemplo: dt.getMonth().

 24
Author: oblig, 2011-04-11 09:26:13

new Date(2000, 10, 1) dar-lhe-á "Wed Nov 01 2000 00: 00: 00 GMT+0100 (CET)"

Veja que 0 para o mês dá-lhe janeiro

 17
Author: noiv, 2011-04-11 09:25:53

Se você pode usar a fantástica bibliotecamomento (por exemplo, num nó.js project) pode facilmente analisar a sua data usando, por exemplo,

var momentDate = moment("2014-09-15 09:00:00");

E pode aceder ao objecto de data JS via

momentDate ().toDate();
 17
Author: High6, 2014-09-22 09:08:52
Momento.js ( http://momentjs.com/) é um pacote completo e bom para usar datas e suportes ISO 8601 strings .

Pode adicionar data e formato de texto.

moment("12-25-1995", "MM-DD-YYYY");

E pode verificar se a data é válida.

moment("not a real date").isValid(); //Returns false

Ver documentação http://momentjs.com/docs/#/parsing/string-format/

Recomendação: eu recomendo usar um pacote para datas que contém um monte de formatos, porque o fuso-horário e tempo de formato gestão realmente um grande problema, momento js resolver um monte de formatos. Podias ... processar facilmente uma data de uma cadeia simples até a data, mas eu acho que é um trabalho duro para suportar todos os formatos e variações de datas.

 13
Author: Juan Caicedo, 2018-08-24 16:21:27

Para aqueles que estão à procura de uma solução minúscula e inteligente:

String.prototype.toDate = function(format)
{
  var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
  var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
  var formatItems     = normalizedFormat.split('-');
  var dateItems       = normalized.split('-');

  var monthIndex  = formatItems.indexOf("mm");
  var dayIndex    = formatItems.indexOf("dd");
  var yearIndex   = formatItems.indexOf("yyyy");
  var hourIndex     = formatItems.indexOf("hh");
  var minutesIndex  = formatItems.indexOf("ii");
  var secondsIndex  = formatItems.indexOf("ss");

  var today = new Date();

  var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
  var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
  var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();

  var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
  var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
  var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();

  return new Date(year,month,day,hour,minute,second);
};

Exemplo:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
 11
Author: Arivan Bastos, 2016-07-26 17:05:30

Se quiser converter do formato "dd/MM/AAAA". Aqui está um exemplo:

var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);

Esta solução funciona em versões IE inferiores a 9.

 10
Author: Alex N., 2016-04-29 02:03:55

As datas devem ser ajustadas a um número

var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works

var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
 10
Author: Lucky Soni, 2016-08-21 15:42:34

Date.parse quase te dá o que queres. Engasga - se no am/pm parte, mas com alguns hackers você pode fazê-lo funcionar.

var str = 'Sun Apr 25, 2010 3:30pm',
    timestamp;

timestamp = Date.parse(str.replace(/[ap]m$/i, ''));

if(str.match(/pm$/i) >= 0) {
    timestamp += 12 * 60 * 60 * 1000;
}
 9
Author: niksvp, 2011-04-11 09:30:42

Confira a biblioteca datejs http://www.datejs.com/

 6
Author: z33m, 2011-04-11 09:22:54

Apenas new Date(st);

Assumindo que é o formato adequado.
 5
Author: Mark Kahn, 2011-04-11 09:23:08

Converter para o formato pt-BR:

    var dateString = "13/10/2014";
    var dataSplit = dateString.split('/');
    var dateConverted;

    if (dataSplit[2].split(" ").length > 1) {

        var hora = dataSplit[2].split(" ")[1].split(':');
        dataSplit[2] = dataSplit[2].split(" ")[0];
        dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]);

    } else {
        dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]);
    }
Espero ajudar alguém!!!
 4
Author: Marcelo Rebouças, 2014-11-13 18:11:09

Eu criei um violino para isto, você pode usar a função toDate() em qualquer texto de data e fornecer o formato de data. Isto irá devolver-lhe um objecto de data. https://jsfiddle.net/Sushil231088/q56yd0rp/

"17/9/2014".toDate("dd/MM/yyyy", "/")
 4
Author: Sushil Mahajan, 2016-06-23 14:18:48

Para converter o texto até à data em js que eu usar http://momentjs.com/

moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
moment().format('dddd');                    // Sunday
moment().format("MMM Do YY");               // Aug 16th 15
moment().format('YYYY [escaped] YYYY');     // 2015 escaped 2015
moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 16 hours ago
moment().endOf('day').fromNow();          // in 8 hours
 3
Author: Alexey Popov, 2015-08-16 13:17:47

Mais uma maneira de o fazer:

String.prototype.toDate = function(format) {
    format = format || "dmy";
    var separator = this.match(/[^0-9]/)[0];
    var components = this.split(separator);
    var day, month, year;
    for (var key in format) {
        var fmt_value = format[key];
        var value = components[key];
        switch (fmt_value) {
            case "d":
                day = parseInt(value);
                break;
            case "m":
                month = parseInt(value)-1;
                break;
            case "y":
                year = parseInt(value);
        }
    }
    return new Date(year, month, day);
};
a = "3/2/2017";
console.log(a.toDate("dmy"));
// Date 2017-02-03T00:00:00.000Z
 2
Author: Mackraken, 2017-02-03 05:11:48

Fiz esta função para converter qualquer objecto de data para um objecto de data UTC.

function dateToUTC(date) {
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}


dateToUTC(new Date());
 2
Author: Andrew Anthony Gerst, 2017-03-07 23:24:29
var date = new Date(year, month, day);

Ou

var date = new Date('01/01/1970');

O texto de data no formato '01-01-1970' não vai funcionar no FireFox, por isso é melhor usar "/" em vez de "-" no texto de formato de data.

 1
Author: Ravi, 2015-03-17 11:20:53

Se precisar de verificar o conteúdo do texto antes de converter para o formato de data:

// Convert 'M/D/YY' to Date()
mdyToDate = function(mdy) {
  var d = mdy.split(/[\/\-\.]/, 3);

  if (d.length != 3) return null;

  // Check if date is valid
  var mon = parseInt(d[0]), 
      day = parseInt(d[1]),
      year= parseInt(d[2]);
  if (d[2].length == 2) year += 2000;
  if (day <= 31 && mon <= 12 && year >= 2015)
    return new Date(year, mon - 1, day);

  return null; 
}
 1
Author: Adriano P, 2015-12-13 03:49:49

var a = "13:15"
var b = toDate(a, "h:m")
alert(b);

function toDate(dStr, format) {
  var now = new Date();
  if (format == "h:m") {
    now.setHours(dStr.substr(0, dStr.indexOf(":")));
    now.setMinutes(dStr.substr(dStr.indexOf(":") + 1));
    now.setSeconds(0);
    return now;
  } else
    return "Invalid Format";
}
 1
Author: Kurenai Kunai, 2016-05-26 16:56:12

Os datestrings ISO 8601-esque, por muito excelentes que sejam os padrões, ainda não são amplamente suportados.

Este é um grande recurso para descobrir qual o formato de datestring que deve usar:

Http://dygraphs.com/date-formats.html

Sim, isso significa que o teu datestring pode ser tão simples quanto

"2014/10/13 23:57:52" em vez de "2014-10-13 23:57:52"

 0
Author: taveras, 2014-10-14 02:28:30
                //little bit of code for Converting dates 

                var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);
 0
Author: Pec1983, 2015-05-12 14:34:20

Use este código: (o meu problema foi resolvido com este código)

function dateDiff(date1, date2){
var diff = {}                           // Initialisation du retour
var tmp = date2 - date1;

tmp = Math.floor(tmp/1000);             // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60;                    // Extraction du nombre de secondes

tmp = Math.floor((tmp-diff.sec)/60);    // Nombre de minutes (partie entière)
diff.min = tmp % 60;                    // Extraction du nombre de minutes

tmp = Math.floor((tmp-diff.min)/60);    // Nombre d'heures (entières)
diff.hour = tmp % 24;                   // Extraction du nombre d'heures

tmp = Math.floor((tmp-diff.hour)/24);   // Nombre de jours restants
diff.day = tmp;

return diff;

}

 0
Author: Fetra, 2018-02-01 06:26:31

Criei a função parseDateTime para converter o texto para o objecto de data e está a funcionar em todo o navegador( incluindo o navegador IE), verifique se alguém é necessário, referência https://github.com/Umesh-Markande/Parse-String-to-Date-in-all-browser

    function parseDateTime(datetime) {
            var monthNames = [
                "January", "February", "March",
                "April", "May", "June", "July",
                "August", "September", "October",
                "November", "December"
              ];
            if(datetime.split(' ').length == 3){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1].replace('.00','');
                var timearray = time.split(':');
                var hours = parseInt(time.split(':')[0]);
                var format = datetime.split(' ')[2];
                var bits = date.split(/\D/);
                date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = date.getDate();
                var monthIndex = date.getMonth();
                var year = date.getFullYear();
                if ((format === 'PM' || format === 'pm') && hours !== 12) {
                    hours += 12;
                    try{  time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] }
                } 
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime.split(' ').length == 2){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1];
                var bits = date.split(/\D/);
                var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = datetimevalue.getDate();
                var monthIndex = datetimevalue.getMonth();
                var year = datetimevalue.getFullYear();
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime != ''){
                var bits = datetime.split(/\D/);
                var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                return date;
            }
            return datetime;
        }

    var date1 = '2018-05-14 05:04:22 AM';   // yyyy-mm-dd hh:mm:ss A
    var date2 = '2018/05/14 05:04:22 AM';   // yyyy/mm/dd hh:mm:ss A
    var date3 = '2018/05/04';   // yyyy/mm/dd
    var date4 = '2018-05-04';   // yyyy-mm-dd
    var date5 = '2018-05-14 15:04:22';   // yyyy-mm-dd HH:mm:ss
    var date6 = '2018/05/14 14:04:22';   // yyyy/mm/dd HH:mm:ss

    console.log(parseDateTime(date1))
    console.log(parseDateTime(date2))
    console.log(parseDateTime(date3))
    console.log(parseDateTime(date4))
    console.log(parseDateTime(date5))
    console.log(parseDateTime(date6))

**Output---**
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time)
 0
Author: Umesh Markande, 2018-07-26 15:35:32

Você pode usar a expressão regular para processar o texto com o tempo de detalhe e então criar a data ou qualquer formato de retorno como:

//example : let dateString = "2018-08-17 01:02:03.4"

function strToDate(dateString){
    let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/
  , [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
  return dateObject;
}
alert(strToDate(dateString));
 0
Author: TungHarry, 2018-08-17 04:28:37

Usa este formato....

//get current date in javascript

  var currentDate=New Date();


// for getting a date from a textbox as string format

   var newDate=document.getElementById("<%=textBox1.ClientID%>").value;

// convert this date to date time

   var MyDate=New Date(newDate);
 -3
Author: Jeetendra singh negi, 2014-09-30 15:47:18

Também podes fazer: o meu encontro.toLocaleDateString ();

 -3
Author: Avishai, 2015-03-25 21:14:50