¿Alguien sabe cómo puedo tomar un datetime
valor de tipo de datos MySQL , como YYYY-MM-DD HH:MM:SS
analizarlo o convertirlo para que funcione en la Date()
función de JavaScript , por ejemplo: - Fecha ('AAAA, MM, DD, HH, MM, SS);
¡Gracias!
¿Alguien sabe cómo puedo tomar un datetime
valor de tipo de datos MySQL , como YYYY-MM-DD HH:MM:SS
analizarlo o convertirlo para que funcione en la Date()
función de JavaScript , por ejemplo: - Fecha ('AAAA, MM, DD, HH, MM, SS);
¡Gracias!
Respuestas:
Algunas de las respuestas dadas aquí son demasiado complicadas o simplemente no funcionarán (al menos, no en todos los navegadores). Si retrocede, puede ver que la marca de tiempo de MySQL tiene cada componente de tiempo en el mismo orden que los argumentos requeridos por el Date()
constructor.
Todo lo que se necesita es una división muy simple en la cadena:
// Split timestamp into [ Y, M, D, h, m, s ]
var t = "2010-06-09 13:12:01".split(/[- :]/);
// Apply each element to the Date function
var d = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));
console.log(d);
// -> Wed Jun 09 2010 14:12:01 GMT+0100 (BST)
Advertencia justa: esto supone que su servidor MySQL está emitiendo fechas UTC (que es el valor predeterminado y se recomienda si no hay un componente de zona horaria de la cadena).
var d = new Date("2010-06-09 13:12:01");
. Aunque es interesante, Chrome no tiene ningún problema.
new Date(Date.UTC(...))
es mejor, pero eso supone que mysql usa utc ... de cualquier manera, esto debe ser considerado antes de esto se puede considerar una respuesta correcta.
Para agregar a la excelente respuesta de Andy E, una función de uso común podría ser:
Date.createFromMysql = function(mysql_string)
{
var t, result = null;
if( typeof mysql_string === 'string' )
{
t = mysql_string.split(/[- :]/);
//when t[3], t[4] and t[5] are missing they defaults to zero
result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);
}
return result;
}
De esta manera, dada una fecha / hora MySQL en el formulario "YYYY-MM-DD HH:MM:SS"
o incluso en el formulario corto (solo fecha) "YYYY-MM-DD"
, puede hacer:
var d1 = Date.createFromMysql("2011-02-20");
var d2 = Date.createFromMysql("2011-02-20 17:16:00");
alert("d1 year = " + d1.getFullYear());
new Date(Date.UTC(...))
otra manera la respuesta es incorrecta por hasta 24 horas ...
Creo que pude haber encontrado una manera más simple, que nadie mencionó.
Una columna MySQL DATETIME se puede convertir en una marca de tiempo de Unix a través de:
SELECT unix_timestamp(my_datetime_column) as stamp ...
Podemos hacer un nuevo objeto JavaScript Date usando el constructor que requiere milisegundos desde la época. La función unix_timestamp devuelve segundos desde la época, por lo que debemos multiplicar por 1000:
SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...
El valor resultante se puede usar directamente para crear una instancia de un objeto de fecha Javascript correcto:
var myDate = new Date(<?=$row['stamp']?>);
Espero que esto ayude.
One liner para navegadores modernos (IE10 +):
var d = new Date(Date.parse("2010-06-09 13:12:01"));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)
Y solo por diversión, aquí hay una línea que funcionará en navegadores antiguos (ahora corregido):
new (Function.prototype.bind.apply(Date, [null].concat("2010-06-09 13:12:01".split(/[\s:-]/)).map(function(v,i){return i==2?--v:v}) ));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)
Las versiones recientes de JavaScript leerán una fecha con formato ISO8601, por lo que todo lo que tiene que hacer es cambiar el espacio a una 'T', haciendo algo como lo siguiente:
#MySQL
select date_format(my_date_column,'%Y-%m-%dT%T') from my_table;
#PHP
$php_date_str = substr($mysql_date_str,0,10).'T'.substr($mysql_date_str,11,8);
//JavaScript
js_date_str = mysql_date_str.substr(0,10)+'T'+mysql_date_str.substr(11,8);
Para agregar aún más a la solución de Marco. Realicé un prototipo directamente al objeto String.
String.prototype.mysqlToDate = String.prototype.mysqlToDate || function() {
var t = this.split(/[- :]/);
return new Date(t[0], t[1]-1, t[2], t[3]||0, t[4]||0, t[5]||0);
};
De esta manera puede ir directamente a:
var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();
Hay una manera más simple, cadena de marca de tiempo sql:
2018-07-19 00:00:00
El formato más cercano a la indicación de fecha y hora para recibir Fecha () es el siguiente, por lo que debe reemplazar el espacio en blanco para "T":
var dateString = media.intervention.replace(/\s/g, "T");
"2011-10-10T14: 48: 00"
Luego, cree el objeto de fecha:
var date = new Date(dateString);
El resultado sería el objeto de fecha:
Jue 19 jul 2018 00:00:00 GMT-0300 (Horário Padrão de Brasília)
De la respuesta de Andy , para AngularJS - Filtro
angular
.module('utils', [])
.filter('mysqlToJS', function () {
return function (mysqlStr) {
var t, result = null;
if (typeof mysqlStr === 'string') {
t = mysqlStr.split(/[- :]/);
//when t[3], t[4] and t[5] are missing they defaults to zero
result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);
}
return result;
};
});
Primero, puede darle al objeto Fecha (clase) de JavaScript el nuevo método 'fromYMD ()' para convertir el formato de fecha YMD de MySQL en formato JavaScript dividiendo el formato YMD en componentes y utilizando estos componentes de fecha:
Date.prototype.fromYMD=function(ymd)
{
var t=ymd.split(/[- :]/); //split into components
return new Date(t[0],t[1]-1,t[2],t[3]||0,t[4]||0,t[5]||0);
};
Ahora puede definir su propio objeto (funcion en el mundo JavaScript):
function DateFromYMD(ymd)
{
return (new Date()).fromYMD(ymd);
}
y ahora simplemente puede crear la fecha desde el formato de fecha MySQL;
var d=new DateFromYMD('2016-07-24');
Puede usar la marca de tiempo de Unix para dirigir:
SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;
Luego obtenga el epoch_time en JavaScript, y es una simple cuestión de:
var myDate = new Date(epoch_time * 1000);
La multiplicación por 1000 se debe a que JavaScript tarda milisegundos y UNIX_TIMESTAMP da segundos.
Una búsqueda rápida en google proporcionó esto:
function mysqlTimeStampToDate(timestamp) {
//function parses mysql datetime string and returns javascript Date object
//input has to be in this format: 2007-06-05 15:26:02
var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
}
¿Por qué no hacer esto?
var d = new Date.parseDate( "2000-09-10 00:00:00", 'Y-m-d H:i:s' );