YYYY-MM-DD HH:MM:SS
などのMySQL datetime
データ型の値を取得し、JavaScriptのDate()
関数で機能するように変換または変換する方法を知っている人はいますか。たとえば、Date( ' YYYY、MM、DD、HH、MM、SS);
ありがとうございました!
ここで与えられた答えのいくつかは、複雑すぎるか、機能しません(少なくとも、すべてのブラウザーで機能するわけではありません)。一歩下がった場合、MySQLタイムスタンプには、Date()
コンストラクターで必要な引数と同じ順序で時間の各コンポーネントが含まれていることがわかります。
必要なのは、文字列の非常に単純な分割です。
// 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)
公正な警告:これは、MySQLサーバーがUTC日付を出力していることを前提としています(これはデフォルトであり、文字列にタイムゾーンコンポーネントがない場合に推奨されます)。
優れた Andy E answer に追加するには、一般的な使用法の関数は次のようになります。
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;
}
この方法では、"YYYY-MM-DD HH:MM:SS"
の形式のMySQL日付/時刻、または短い形式(日付のみ)"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());
誰も言及していない、もっと簡単な方法を見つけたと思う。
MySQLのDATETIME列は、次の方法でUNIXタイムスタンプに変換できます。
SELECT unix_timestamp(my_datetime_column) as stamp ...
エポック以降のミリ秒を必要とするコンストラクターを使用して、新しいJavaScript Dateオブジェクトを作成できます。 unix_timestamp関数はエポックからの秒数を返すため、1000倍する必要があります。
SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...
結果の値を直接使用して、正しいJavascript Dateオブジェクトをインスタンス化できます。
var myDate = new Date(<?=$row['stamp']?>);
お役に立てれば。
最新のブラウザ用のライナー(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)
そして、楽しみのために、古いブラウザー(現在修正済み)で動作するワンライナーがあります:
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の最近のバージョンはISO8601形式の日付を読み取るため、必要な作業はスペースを「T」に変更するだけで、次のいずれかを実行します。
#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);
より簡単な方法、sqlタイムスタンプ文字列があります:
2018-07-19 00:00:00
受信するDate()のタイムスタンプに最も近い形式は次のとおりです。そのため、「T」の空白スペースを置き換えます。
var dateString = media.intervention.replace(/\s/g, "T");
「2011-10-10T14:48:00」
次に、日付オブジェクトを作成します。
var date = new Date(dateString);
結果は日付オブジェクトになります。
2018年7月19日(木)00:00:00 GMT-0300(オラリオパドランデブラジリア)
さらにマルコのソリューションを追加します。 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);
};
この方法では、次の場所に直接移動できます。
var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();
From Andy's Answer 、AngularJSの場合-フィルター
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;
};
});
var a=dateString.split(" ");
var b=a[0].split("-");
var c=a[1].split(":");
var date = new Date(b[0],(b[1]-1),b[2],b[0],c[1],c[2]);
最初に、YMD形式をコンポーネントに分割し、これらの日付コンポーネントを使用して、MySQLのYMD日付形式をJavaScript形式に変換するための新しいメソッド 'fromYMD()'をJavaScriptのDateオブジェクト(クラス)に与えることができます。
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);
};
これで、独自のオブジェクト(JavaScriptの世界では機能)を定義できます。
function DateFromYMD(ymd)
{
return (new Date()).fromYMD(ymd);
}
これで、MySQLの日付形式から日付を簡単に作成できます。
var d=new DateFromYMD('2016-07-24');
UNIXタイムスタンプを使用して、次のことを指示できます。
SELECT UNIX_TIMESTAMP(date) AS Epoch_time FROM table;
次に、Epoch_timeをJavaScriptに取り込みます。これは次の簡単なことです。
var myDate = new Date(Epoch_time * 1000);
1000を掛けるのは、JavaScriptがミリ秒かかり、UNIX_TIMESTAMPが秒を与えるためです。