Herkes datetime
gibi bir MySQL veri türü değeri alabilir nasıl YYYY-MM-DD HH:MM:SS
ya da ayrıştırmak veya JavaScript Date()
işlevinde çalışmak için dönüştürmek , örneğin: - Tarih ('YYYY, MM, DD, HH, MM, SS);
Teşekkür ederim!
Herkes datetime
gibi bir MySQL veri türü değeri alabilir nasıl YYYY-MM-DD HH:MM:SS
ya da ayrıştırmak veya JavaScript Date()
işlevinde çalışmak için dönüştürmek , örneğin: - Tarih ('YYYY, MM, DD, HH, MM, SS);
Teşekkür ederim!
Yanıtlar:
Burada verilen cevapların bazıları aşırı karmaşıktır veya sadece işe yaramaz (en azından tüm tarayıcılarda değil). Bir adım geri atarsanız, MySQL zaman damgasının her bir zaman bileşeninin Date()
yapıcı tarafından istenen bağımsız değişkenlerle aynı sırada olduğunu görebilirsiniz .
İhtiyaç duyulan tek şey ipte çok basit bir ayrım:
// 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)
Adil uyarı: Bu, MySQL sunucunuzun UTC tarihleri verdiğini varsayar (bu varsayılan değerdir ve dizenin saat dilimi bileşeni yoksa önerilir).
var d = new Date("2010-06-09 13:12:01");
. İlginçtir, Chrome'un bununla bir sorunu yoktur.
new Date(Date.UTC(...))
daha iyidir, ancak mysql'nin utc kullandığını varsayar ... her iki şekilde de bundan önce düşünülmüşse doğru bir cevap olarak düşünülebilir.
Mükemmel Andy E cevap eklemek için ortak kullanım bir işlevi olabilir:
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;
}
Bu şekilde, formdaki bir MySQL tarih / saati "YYYY-MM-DD HH:MM:SS"
veya hatta kısa form (yalnızca tarih) verildiğinde "YYYY-MM-DD"
:
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(...))
cevabı 24 saate kadar yanlış başka akıllıca kullanmalısınız ...
Sanırım kimsenin bahsetmediği daha basit bir yol bulmuş olabilirim.
Bir MySQL DATETIME sütunu, aşağıdakiler aracılığıyla bir unix zaman damgasına dönüştürülebilir:
SELECT unix_timestamp(my_datetime_column) as stamp ...
Dönemden bu yana milisaniye gerektiren yapıcıyı kullanarak yeni bir JavaScript Tarihi nesnesi oluşturabiliriz. Unix_timestamp işlevi dönemden bu yana saniyeler döndürür, bu nedenle 1000 ile çarpmamız gerekir:
SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...
Ortaya çıkan değer doğrudan doğru bir Javascript Date nesnesini başlatmak için kullanılabilir:
var myDate = new Date(<?=$row['stamp']?>);
Bu yardımcı olur umarım.
Modern tarayıcılar için bir astar (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)
Ve sadece eğlence için, eski tarayıcılarda (şimdi düzeltildi) çalışacak tek astar:
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)
JavaScript'in son sürümleri ISO8601 biçiminde bir tarih okuyacaktır, bu nedenle tek yapmanız gereken alanı 'T' olarak değiştirmek ve aşağıdakilerden biri gibi bir şey yapmaktır:
#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);
Marco'nun çözümüne daha da fazla eklemek için. Doğrudan String nesnesine prototip yaptım.
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);
};
Bu şekilde doğrudan şuraya gidebilirsiniz:
var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();
Daha basit bir yol var, sql zaman damgası dizesi:
2018-07-19 00:00:00
Date () için alınacak zaman damgasına en yakın biçim şöyledir, bu nedenle "T" için boş alanı değiştirin:
var dateString = media.intervention.replace(/\s/g, "T");
"2011-10-10T14: 48: 00"
Ardından, tarih nesnesini oluşturun:
var date = new Date(dateString);
sonuç tarih nesnesi olur:
Perş 19 Tem 2018 00:00:00 GMT-0300 (Horário Padrão de Brasília)
Gönderen Andy'nin Yanıt , angularjs için - Filtre
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;
};
});
Öncelikle, YMD biçimini bileşenlere bölerek ve şu tarih bileşenlerini kullanarak MySQL'in YMD tarih biçimini JavaScript biçimine dönüştürmek için JavaScript'in Date nesnesine (sınıf) yeni 'fromYMD ()' yöntemini verebilirsiniz:
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);
};
Artık kendi nesnenizi tanımlayabilirsiniz (JavaScript dünyasında işlev):
function DateFromYMD(ymd)
{
return (new Date()).fromYMD(ymd);
}
ve şimdi MySQL tarih biçiminden tarih oluşturabilirsiniz;
var d=new DateFromYMD('2016-07-24');
Yönlendirmek için unix zaman damgasını kullanabilirsiniz:
SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;
Sonra epoch_time'ı JavaScript'e dönüştürün ve basit bir mesele:
var myDate = new Date(epoch_time * 1000);
1000 ile çarpma, JavaScript'in milisaniye alması ve UNIX_TIMESTAMP'ın saniye vermesidir.
Google'da hızlı bir arama şunları sağladı:
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]);
}
Bunu neden yapmıyorsunuz:
var d = new Date.parseDate( "2000-09-10 00:00:00", 'Y-m-d H:i:s' );