2011-04-01 37 views
24

Cómo convertir cadenas como esta '01 -01-1970 00:03:44 'a JavaScript datetime?Convierte cadena a datetime

+0

posible duplicado de http: //stackoverflow.com/questions/476105/how-can-i-convert-string-to-datetime-with-format-specification-in-javascript –

+0

Su pregunta parece ser un duplicado de esta: http://stackoverflow.com/q/476105/684934 – bdares

+0

Compruebe esto; http://stackoverflow.com/a/25961926/1766100 Funcionó para mí. –

Respuesta

11

Para este formato (suponiendo datepart tiene el formato dd- mm-aaaa) en javascript simple use dateString2Date.

[Editar ] Se ha añadido un método de utilidad ES6 para analizar una cadena de fecha utilizando un parámetro de cadena de formato (format) para informar el método de la posición de día/mes/año en la cadena de entrada.

var result = document.querySelector('#result'); 
 

 
result.textContent = 
 
    `*Fixed\ndateString2Date('01-01-2016 00:03:44'):\n => ${ 
 
    dateString2Date('01-01-2016 00:03:44')}`; 
 

 
result.textContent += 
 
    `\n\n*With formatting\ntryParseDateFromString('01-01-2016 00:03:44', 'dmy'):\n => ${ 
 
    tryParseDateFromString('01-01-2016 00:03:44', "dmy").toUTCString()}`; 
 

 
result.textContent += 
 
    `\n\nWith formatting\ntryParseDateFromString('03/01/2016', 'mdy'):\n => ${ 
 
    tryParseDateFromString('03/01/1943', "mdy").toUTCString()}`; 
 

 
// fixed format dd-mm-yyyy 
 
function dateString2Date(dateString) { 
 
    var dt = dateString.split(/\-|\s/); 
 
    return new Date(dt.slice(0,3).reverse().join('-') + ' ' + dt[3]); 
 
} 
 

 
// multiple formats (e.g. yyyy/mm/dd or mm-dd-yyyy etc.) 
 
function tryParseDateFromString(dateStringCandidateValue, format = "ymd") { 
 
    if (!dateStringCandidateValue) { return null; } 
 
    let mapFormat = format 
 
      .split("") 
 
      .reduce(function (a, b, i) { a[b] = i; return a;}, {}); 
 
    const dateStr2Array = dateStringCandidateValue.split(/[ :\-\/]/g); 
 
    const datePart = dateStr2Array.slice(0, 3); 
 
    let datePartFormatted = [ 
 
      +datePart[mapFormat.y], 
 
      +datePart[mapFormat.m]-1, 
 
      +datePart[mapFormat.d] ]; 
 
    if (dateStr2Array.length > 3) { 
 
     dateStr2Array.slice(3).forEach(t => datePartFormatted.push(+t)); 
 
    } 
 
    // test date validity according to given [format] 
 
    const dateTrial = new Date(Date.UTC.apply(null, datePartFormatted)); 
 
    return dateTrial && dateTrial.getFullYear() === datePartFormatted[0] && 
 
     dateTrial.getMonth() === datePartFormatted[1] && 
 
     dateTrial.getDate() === datePartFormatted[2] 
 
      ? dateTrial : 
 
      null; 
 
}
<pre id="result"></pre>

0

no hay ninguna construidos de forma, es posible que desee intentar algo así como this: ver también this question

+0

Esta respuesta parece obsoleta – insign

2
formatDateTime(sDate,FormatType) { 
    var lDate = new Date(sDate) 

    var month=new Array(12); 
    month[0]="January"; 
    month[1]="February"; 
    month[2]="March"; 
    month[3]="April"; 
    month[4]="May"; 
    month[5]="June"; 
    month[6]="July"; 
    month[7]="August"; 
    month[8]="September"; 
    month[9]="October"; 
    month[10]="November"; 
    month[11]="December"; 

    var weekday=new Array(7); 
    weekday[0]="Sunday"; 
    weekday[1]="Monday"; 
    weekday[2]="Tuesday"; 
    weekday[3]="Wednesday"; 
    weekday[4]="Thursday"; 
    weekday[5]="Friday"; 
    weekday[6]="Saturday"; 

    var hh = lDate.getHours() < 10 ? '0' + 
     lDate.getHours() : lDate.getHours(); 
    var mi = lDate.getMinutes() < 10 ? '0' + 
     lDate.getMinutes() : lDate.getMinutes(); 
    var ss = lDate.getSeconds() < 10 ? '0' + 
     lDate.getSeconds() : lDate.getSeconds(); 

    var d = lDate.getDate(); 
    var dd = d < 10 ? '0' + d : d; 
    var yyyy = lDate.getFullYear(); 
    var mon = eval(lDate.getMonth()+1); 
    var mm = (mon<10?'0'+mon:mon); 
    var monthName=month[lDate.getMonth()]; 
    var weekdayName=weekday[lDate.getDay()]; 

    if(FormatType==1) { 
     return mm+'/'+dd+'/'+yyyy+' '+hh+':'+mi; 
    } else if(FormatType==2) { 
     return weekdayName+', '+monthName+' '+ 
      dd +', ' + yyyy; 
    } else if(FormatType==3) { 
     return mm+'/'+dd+'/'+yyyy; 
    } else if(FormatType==4) { 
     var dd1 = lDate.getDate();  
     return dd1+'-'+Left(monthName,3)+'-'+yyyy;  
    } else if(FormatType==5) { 
     return mm+'/'+dd+'/'+yyyy+' '+hh+':'+mi+':'+ss; 
    } else if(FormatType == 6) { 
     return mon + '/' + d + '/' + yyyy + ' ' + 
      hh + ':' + mi + ':' + ss; 
    } else if(FormatType == 7) { 
     return dd + '-' + monthName.substring(0,3) + 
      '-' + yyyy + ' ' + hh + ':' + mi + ':' + ss; 
    } 
} 
35

Debe ser sencillo con new Date(string). Esto debe hacerlo ...

var s = '01-01-1970 00:03:44'; 
var d = new Date(s); 
console.log(d); // ---> Thu Jan 01 1970 00:03:44 GMT-0500 (Eastern Standard Time) 

Referencia: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

+3

¿Por qué no es esta la respuesta?Esta es probablemente la respuesta más intuitiva aquí. – hlin117

+0

No en safari. Hacer esto con este formato de cadena da como resultado una fecha no válida – yeahdixon

+0

Más información sobre cuestiones de safari: http://stackoverflow.com/questions/4310953/invalid-date-in-safari Cuando sea posible, le sugiero que utilice el formato de cadena de fecha que es citado en la respuesta aceptada. Esperemos que Safari eventualmente se conforme al estándar. Mientras tanto, es posible que se necesite una biblioteca adicional si esto es un problema para usted. – Luke

1

usted podría utilizar la biblioteca moment.js.

Después, simplemente:

var stringDate = '01-01-1970 00:03:44'; 
var momentDateObj = moment(stringDate); 

Pedido de su API también, ayuda con el formato, sumar, restar (días, meses, años, otro momento de los objetos).

Espero que esto ayude.

Rhys

+0

¿cómo sabes que tu stringDate está estructurado como dd-mm y no mm-dd con tu respuesta? ¿Qué ocurre si la configuración local de un navegador chino hace referencia al 01-01-1970 como mm-dd-aaaa y si otro navegador está en otra ubicación es dd-mm-aaaa? – themis

+0

Compatible con todos ellos :) –

0

Para este formato (supuesta datepart tiene el formato dd-mm-aaaa) en javascript llanura:

var dt = '01-01-1970 00:03:44'.split(/\-|\s/) 
 
    dat = new Date(dt.slice(0,3).reverse().join('/')+' '+dt[3]);