2012-01-13 14 views
8

Tengo una cadena de fecha/hora como 2012-01-13 04:37:20 pero quiero convertirla a dd-mm-yyyy hh:mm, ¿cómo puedo hacer esto?Formateo de la fecha y hora con Javascript

Estoy usando el siguiente código pero arroja una excepción.

var now = "2012-01-13 04:37:20"; 
var dd = now.toLocaleDateString() + " " + now.toLocaleTimeString(); 
alert(dd); 

Respuesta

8

Puede hacer una manipulación de cadena simple y crear el objeto de fecha js. Ver la función siguiente, que acepta la fecha en el formato hh // aaaa-mm-dd: mm: ss

DEMO aquí

function toJSDate (dateTime) { 

var dateTime = dateTime.split(" ");//dateTime[0] = date, dateTime[1] = time 

var date = dateTime[0].split("-"); 
var time = dateTime[1].split(":"); 

//(year, month, day, hours, minutes, seconds, milliseconds) 
return new Date(date[0], date[1], date[2], time[0], time[1], time[2], 0); 

} 
+5

'date [1]' 'debería ser la fecha [1] - 1' para la salida correcta del mes. – Dzhuang

-2

La variable ahora es un objeto String y toLocaleDateString método necesita un objeto Date. Ver w3schools

5

uso ya sea de manipulación de cadenas simples (como lo sugiere @SKS) o utilizar una biblioteca . Este último es más flexible y le permite cambiar el formato de entrada o salida fácilmente. Por ejemplo, el uso de la biblioteca Globalize.js, usted escribiría:

var dd = Globalize.parseDate(now, "yyyy-MM-dd HH:mm:ss"); 
dd = Globalize.format(dd, "dd-MM-yyyy HH:mm"); 

Nota sin embargo que los formatos tales como "hh dd-mm-aaaa: mm" son confusas - que no es ni un formato estándar ISO ni ninguna localizada (lenguaje dependiente). La biblioteca Globalize.js le permite usar formatos predefinidos que dependen del idioma además de los formatos explícitamente especificados.

Tenga en cuenta que las rutinas integradas de análisis de fecha y hora en JavaScript dependen de la implementación. Usarlos significa código no portátil. Por ejemplo, no hay garantía de que new Date() acepte el formato que tiene como entrada, y toLocaleDateString() escribe la fecha en algún formato dependiente de la configuración regional, que puede ser casi cualquier cosa.

0

La fecha requiere el objeto Date, por lo que debe dar var d = new Date() algo así como y luego para formatear ver http://code.google.com/p/datejs/ link será útil.

3

el mejor manejo en JavaScript lib fecha-hora es moment.

moment().format('MMMM Do YYYY, h:mm:ss a'); 
4

Si usted no necesita todas las características que una biblioteca como Moment.js proporciona, entonces se puede usar mi puerto de strftime. Es liviano (1.35 KB vs. 57.9 KB minificado en comparación con Moment.js 2.15.0) y proporciona la mayor parte de la funcionalidad de strftime(). el uso

/* Port of strftime(). Compatibility notes: 
* 
* %c - formatted string is slightly different 
* %D - not implemented (use "%m/%d/%y" or "%d/%m/%y") 
* %e - space is not added 
* %E - not implemented 
* %h - not implemented (use "%b") 
* %k - space is not added 
* %n - not implemented (use "\n") 
* %O - not implemented 
* %r - not implemented (use "%I:%M:%S %p") 
* %R - not implemented (use "%H:%M") 
* %t - not implemented (use "\t") 
* %T - not implemented (use "%H:%M:%S") 
* %U - not implemented 
* %W - not implemented 
* %+ - not implemented 
* %% - not implemented (use "%") 
* 
* strftime() reference: 
* http://man7.org/linux/man-pages/man3/strftime.3.html 
* 
* Day of year (%j) code based on Joe Orost's answer: 
* http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366 
* 
* Week number (%V) code based on Taco van den Broek's prototype: 
* http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html 
*/ 
function strftime(sFormat, date) { 
    if (!(date instanceof Date)) date = new Date(); 
    var nDay = date.getDay(), 
    nDate = date.getDate(), 
    nMonth = date.getMonth(), 
    nYear = date.getFullYear(), 
    nHour = date.getHours(), 
    aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], 
    aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], 
    aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], 
    isLeapYear = function() { 
     return (nYear%4===0 && nYear%100!==0) || nYear%400===0; 
    }, 
    getThursday = function() { 
     var target = new Date(date); 
     target.setDate(nDate - ((nDay+6)%7) + 3); 
     return target; 
    }, 
    zeroPad = function(nNum, nPad) { 
     return ('' + (Math.pow(10, nPad) + nNum)).slice(1); 
    }; 
    return sFormat.replace(/%[a-z]/gi, function(sMatch) { 
    return { 
     '%a': aDays[nDay].slice(0,3), 
     '%A': aDays[nDay], 
     '%b': aMonths[nMonth].slice(0,3), 
     '%B': aMonths[nMonth], 
     '%c': date.toUTCString(), 
     '%C': Math.floor(nYear/100), 
     '%d': zeroPad(nDate, 2), 
     '%e': nDate, 
     '%F': date.toISOString().slice(0,10), 
     '%G': getThursday().getFullYear(), 
     '%g': ('' + getThursday().getFullYear()).slice(2), 
     '%H': zeroPad(nHour, 2), 
     '%I': zeroPad((nHour+11)%12 + 1, 2), 
     '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3), 
     '%k': '' + nHour, 
     '%l': (nHour+11)%12 + 1, 
     '%m': zeroPad(nMonth + 1, 2), 
     '%M': zeroPad(date.getMinutes(), 2), 
     '%p': (nHour<12) ? 'AM' : 'PM', 
     '%P': (nHour<12) ? 'am' : 'pm', 
     '%s': Math.round(date.getTime()/1000), 
     '%S': zeroPad(date.getSeconds(), 2), 
     '%u': nDay || 7, 
     '%V': (function() { 
       var target = getThursday(), 
       n1stThu = target.valueOf(); 
       target.setMonth(0, 1); 
       var nJan1 = target.getDay(); 
       if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7); 
       return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2); 
      })(), 
     '%w': '' + nDay, 
     '%x': date.toLocaleDateString(), 
     '%X': date.toLocaleTimeString(), 
     '%y': ('' + nYear).slice(2), 
     '%Y': nYear, 
     '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'), 
     '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1') 
    }[sMatch] || sMatch; 
    }); 
} 

muestra:

// Returns "15-09-2016 16:20" 
strftime('%d-%m-%Y %H:%M'); 

// You can optionally pass it a Date object 
// Returns "01-01-2016 21:30" 
strftime('%d-%m-%Y %H:%M', new Date('Jan 1, 2016 9:30 PM')); 

El último código está disponible aquí: https://github.com/thdoan/strftime

0

una pequeña función, de la siguiente manera:

var formatTime = function(time, format){ 
time = typeof time == 'number' ? new Date(time) : time; 
format = format || 'yyyy-mm-dd hh:MM:ss'; 
var year = time.getFullYear(); 
var month = time.getMonth() + 1; 
var date = time.getDate(); 
var hours = time.getHours(); 
var minutes = time.getMinutes(); 
var seconds = time.getSeconds(); 
var add0 = function(t){return t < 10 ? '0' + t : t} 
var replaceMent = { 
    'yyyy': year, 
    'mm': add0(month), 
    'm': month, 
    'dd': add0(date), 
    'd': date, 
    'hh': add0(hours), 
    'h': hours, 
    'MM': add0(minutes), 
    'M': minutes, 
    'ss': add0(seconds), 
    's': seconds 
} 
for(var k in replaceMent){ 
    format = format.replace(k, replaceMent[k]); 
} 
return format; 

}

1

Creo que es mejor utilizar la clase Intl.DateTimeFormat.

El uso es bastante sencillo.No puede ingresar un patrón como desee, pero le dará los resultados que desea.

Aquí es un ejemplo de cómo se usa:

public formatDate(date : Date) : string{ 
    var options = { year: 'numeric', month: 'short', day: 'numeric' }; 
    return new Intl.DateTimeFormat('de-DE', options).format(date); 
} 

Si realmente desea introducir una cadena DateTimeFormat, sería bastante fácil de escribir una función que analiza la cadena usando expresiones regulares, pero Don No creo que sea necesario.

Para más información, entra aquí:

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

+0

Es bueno saber que esto existe, pero esto no está disponible en todas las plataformas como se describe en la referencia de mozilla –

0

Para trabajar con DateTime en javascript que es mejor utilizar el 'Intl.DateTimeFormat' de la siguiente manera:

var date = new Date('2012-01-13 14:37:20'); 
var options = { year: 'numeric', month: '2-digit', day: '2-digit', 
hour:'2-digit', minute: '2-digit',hour12: false}; 
console.log(new Intl.DateTimeFormat('en-US', options).format(date).replace(/\//g,'-').replace(',','')); 

Resultado: "01- 13-2012 14:37 "

Los formatos de fecha y hora se pueden personalizar con el argumento de opciones.

Check Online

0

logra fácilmente por mi paquete date-shortcode:

const dateShortcode = require('date-shortcode') 
dateShortcode.parse('{DD-MM-YYYY hh:mm}', '2012-01-13 04:37:20') 
//=> '13-01-2012 04:37' 
Cuestiones relacionadas