Czy ktoś wie, jak mogę wziąć datetime
wartość typu danych MySQL , taką jak YYYY-MM-DD HH:MM:SS
i albo ją przeanalizować, albo przekonwertować do pracy w Date()
funkcji JavaScript , na przykład: - Data ('RRRR, MM, DD, HH, MM, SS);
Dziękuję Ci!
Czy ktoś wie, jak mogę wziąć datetime
wartość typu danych MySQL , taką jak YYYY-MM-DD HH:MM:SS
i albo ją przeanalizować, albo przekonwertować do pracy w Date()
funkcji JavaScript , na przykład: - Data ('RRRR, MM, DD, HH, MM, SS);
Dziękuję Ci!
Odpowiedzi:
Niektóre z udzielonych tutaj odpowiedzi są albo zbyt skomplikowane, albo po prostu nie będą działać (przynajmniej nie we wszystkich przeglądarkach). Jeśli cofniesz się o krok, zobaczysz, że sygnatura czasowa MySQL ma każdy składnik czasu w tej samej kolejności, co argumenty wymagane przez Date()
konstruktor.
Wszystko, czego potrzeba, to bardzo prosty podział na ciąg:
// 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)
Uczciwe ostrzeżenie: zakłada się, że serwer MySQL wyświetla daty UTC (co jest domyślne i zalecane, jeśli w ciągu nie ma składnika strefy czasowej).
var d = new Date("2010-06-09 13:12:01");
. Co ciekawe, Chrome nie ma z tym problemu.
new Date(Date.UTC(...))
jest lepsze, ale zakłada się, że mysql używa utc ... tak czy inaczej musi to być rozważone, zanim będzie można to uznać za poprawną odpowiedź.
Aby dodać do doskonałej odpowiedzi Andy E, często używaną funkcją może być:
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;
}
W ten sposób podając datę / czas MySQL w formularzu "YYYY-MM-DD HH:MM:SS"
lub nawet w formie skróconej (tylko data) "YYYY-MM-DD"
możesz zrobić:
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(...))
innego mądrego odpowiedź jest błędna do 24 godzin ...
Myślę, że mogłem znaleźć prostszy sposób, o którym nikt nie wspomniał.
Kolumnę MySQL DATETIME można przekonwertować na uniksowy znacznik czasu poprzez:
SELECT unix_timestamp(my_datetime_column) as stamp ...
Możemy stworzyć nowy obiekt Date w JavaScript używając konstruktora, który wymaga milisekund od epoki. Funkcja unix_timestamp zwraca sekundy od epoki, więc musimy pomnożyć przez 1000:
SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...
Wynikowa wartość może zostać użyta bezpośrednio do utworzenia instancji poprawnego obiektu Date Javascript:
var myDate = new Date(<?=$row['stamp']?>);
Mam nadzieję że to pomoże.
Jedna linijka dla nowoczesnych przeglądarek (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)
I dla zabawy, oto jeden wiersz, który będzie działał w starszych przeglądarkach (teraz naprawiony):
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)
Najnowsze wersje JavaScript odczytują datę w formacie ISO8601, więc wszystko, co musisz zrobić, to zmienić spację na „T”, wykonując jedną z następujących czynności:
#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);
Aby jeszcze bardziej rozszerzyć rozwiązanie Marco. Prototypowałem bezpośrednio do obiektu 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);
};
W ten sposób możesz przejść bezpośrednio do:
var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();
Jest prostszy sposób, ciąg sql timestamp:
2018-07-19 00:00:00
Najbliższy format do znacznika czasu dla Date () do odebrania jest następujący, więc zastąp puste miejsce dla „T”:
var dateString = media.intervention.replace(/\s/g, "T");
„2011-10-10T14: 48: 00”
Następnie utwórz obiekt daty:
var date = new Date(dateString);
wynikiem byłby obiekt daty:
Czw 19 Lip 2018 00:00:00 GMT-0300 (Horário Padrão de Brasília)
Z odpowiedzi Andy'ego , dla AngularJS - Filtr
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;
};
});
Najpierw możesz nadać obiektowi Date (klasa) JavaScript nową metodę 'fromYMD ()' do konwersji formatu daty YMD MySQL na format JavaScript, dzieląc format YMD na komponenty i używając następujących komponentów daty:
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);
};
Teraz możesz zdefiniować swój własny obiekt (funkcja w świecie JavaScript):
function DateFromYMD(ymd)
{
return (new Date()).fromYMD(ymd);
}
a teraz możesz po prostu utworzyć datę z formatu daty MySQL;
var d=new DateFromYMD('2016-07-24');
Możesz użyć unix timestamp do bezpośredniego:
SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;
Następnie pobierz epoch_time do JavaScript i jest to prosta sprawa:
var myDate = new Date(epoch_time * 1000);
Mnożenie przez 1000 wynika z tego, że JavaScript zajmuje milisekundy, a UNIX_TIMESTAMP podaje sekundy.
Szybkie wyszukiwanie w Google zapewniło to:
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]);
}
Dlaczego tego nie zrobić:
var d = new Date.parseDate( "2000-09-10 00:00:00", 'Y-m-d H:i:s' );