Qualcuno sa come posso prendere un datetime
valore del tipo di dati MySQL , come YYYY-MM-DD HH:MM:SS
e analizzarlo o convertirlo per funzionare nella Date()
funzione JavaScript , ad esempio: - Data ('AAAA, MM, GG, HH, MM, SS);
Grazie!
Qualcuno sa come posso prendere un datetime
valore del tipo di dati MySQL , come YYYY-MM-DD HH:MM:SS
e analizzarlo o convertirlo per funzionare nella Date()
funzione JavaScript , ad esempio: - Data ('AAAA, MM, GG, HH, MM, SS);
Grazie!
Risposte:
Alcune delle risposte fornite qui sono o troppo complicate o semplicemente non funzioneranno (almeno, non in tutti i browser). Se fai un passo indietro, puoi vedere che il timestamp di MySQL ha ogni componente del tempo nello stesso ordine degli argomenti richiesti dal Date()
costruttore.
Tutto ciò che serve è una divisione molto semplice sulla stringa:
// 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)
Avviso equo: questo presuppone che il tuo server MySQL stia emettendo date UTC (che è l'impostazione predefinita e consigliata se non ci sono componenti del fuso orario della stringa).
var d = new Date("2010-06-09 13:12:01");
. Sebbene interessante, Chrome non ha problemi con esso.
new Date(Date.UTC(...))
è meglio, ma ciò presuppone che mysql usi utc ... in entrambi i casi deve essere considerato prima questo può essere considerato una risposta corretta.
Per aggiungere all'eccellente risposta Andy E una funzione di uso comune potrebbe essere:
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;
}
In questo modo data una data / ora MySQL nel modulo "YYYY-MM-DD HH:MM:SS"
o anche la forma abbreviata (solo data) "YYYY-MM-DD"
puoi fare:
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(...))
altri saggi la risposta è sbagliata fino a 24 ore ...
Penso di aver trovato un modo più semplice, che nessuno ha menzionato.
Una colonna MySQL DATETIME può essere convertita in un timestamp unix tramite:
SELECT unix_timestamp(my_datetime_column) as stamp ...
Possiamo creare un nuovo oggetto Date JavaScript utilizzando il costruttore che richiede millisecondi dall'epoca. La funzione unix_timestamp restituisce secondi dall'epoca, quindi dobbiamo moltiplicare per 1000:
SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...
Il valore risultante può essere utilizzato direttamente per creare un'istanza di un oggetto Date JavaScript corretto:
var myDate = new Date(<?=$row['stamp']?>);
Spero che questo ti aiuti.
Una fodera per browser moderni (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)
E solo per divertimento, ecco un one-liner che funzionerà su browser più vecchi (ora corretti):
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)
Le versioni recenti di JavaScript leggeranno una data formattata ISO8601, quindi tutto ciò che devi fare è cambiare lo spazio in una 'T', facendo qualcosa del tipo:
#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);
Da aggiungere ancora di più alla soluzione di Marco. Ho prototipato direttamente l'oggetto 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);
};
In questo modo puoi andare direttamente a:
var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();
Esiste un modo più semplice, stringa timestamp sql:
19-07-2018 00:00:00
Il formato più vicino al timestamp per la data () da ricevere è il seguente, quindi sostituisci lo spazio vuoto per "T":
var dateString = media.intervention.replace(/\s/g, "T");
"2011-10-10T14: 48: 00"
Quindi, crea l'oggetto data:
var date = new Date(dateString);
risultato sarebbe l'oggetto data:
Gio 19 lug 2018 00:00:00 GMT-0300 (Horário Padrão de Brasília)
Dalla risposta di Andy , per 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;
};
});
Per prima cosa puoi dare all'oggetto Date (classe) JavaScript il nuovo metodo 'fromYMD ()' per convertire il formato data YMD di MySQL in formato JavaScript suddividendo il formato YMD in componenti e usando questi componenti data:
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);
};
Ora puoi definire il tuo oggetto (funzione nel mondo JavaScript):
function DateFromYMD(ymd)
{
return (new Date()).fromYMD(ymd);
}
e ora puoi semplicemente creare la data dal formato data di MySQL;
var d=new DateFromYMD('2016-07-24');
È possibile utilizzare unix timestamp per dirigere:
SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;
Quindi porta epoch_time in JavaScript, ed è una semplice questione di:
var myDate = new Date(epoch_time * 1000);
La moltiplicazione per 1000 è dovuta al fatto che JavaScript richiede millisecondi e UNIX_TIMESTAMP dà secondi.
Una rapida ricerca su Google ha fornito questo:
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]);
}
Perché non farlo:
var d = new Date.parseDate( "2000-09-10 00:00:00", 'Y-m-d H:i:s' );