2009-11-19 82 views
15

什麼將是一個MySQL日期格式轉換成JavaScript Date對象的最佳方式?轉換一個MySQL日期爲Javascript日期

mySQL的日期格式爲 'YYYY-MM-DD'(ISO格式)。將是我的優先選擇

+1

你是否有一個具體問題?你試過什麼了? AAre在日期傳遞給javascript Date對象時有問題嗎? – Zak 2009-11-19 19:15:27

+0

Date.parse('2009-01-01');不起作用。試圖找到一種方法來轉換它。日期是通過來自另一家公司的json對象來的,它以ISO格式返回日期。 – 2009-11-19 19:22:08

回答

37

鑑於你澄清,你不能改變傳入的日期格式,你需要的東西是這樣的:

var dateParts = isoFormatDateString.split("-"); 
var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0,2)); 

原始回覆:

是否有一個原因,你不能獲得時間戳而不是日期字符串?這將通過像這樣做:

SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table; 

然後讓epoch_time成JavaScript,這是一個簡單的問題:

var myDate = new Date(epoch_time * 1000); 

1000乘法是因爲JavaScript邁出毫秒,UNIX_TIMESTAMP給秒。

+0

我無法改變數據返回給我的方式。我有ISO格式的日期,我需要在客戶端進行轉換。 – 2009-11-19 19:23:59

2

UNIX timestamp(自1970年1月1日毫秒)。

可以圍繞把它作爲一個整數,並使用JS setTime()方法從它使一個JS Date對象。

0

您可以分割日期「 - 」作爲分隔符,並使用此構造函數:

var d = new Date(Y, M - 1, D); 
+0

以及如何將它分割? – 2009-11-19 19:24:29

+0

if ds ='YYYY-MM-DD':ds.split(' - ') – 2009-11-19 20:07:02

0

在這看來做的確實是OP想要的,並且使用jhurshman的回答,所以我+1了它,但它是不完整的,因爲它將使用00:00:00 GMT-0500 (CDT)作爲時間部分,因爲它沒有傳遞給日期對象(var jsDate)。

萬一別人是希望創建完整Javascriptdate object

例如:

Sat Mar 29 2014 23:24:28 GMT-0500 (CDT) 

基於MySQL的DATETIME格式

例如:

'9999-12-31 23:59:59'. 

您將要使用以下命令:

var dateParts = isoFormatDateString.split("-"); 
var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0, 2), dateParts[2].substr(3, 2), dateParts[2].substr(6, 2), dateParts[2].substr(9, 2)); 

它會在瀏覽器返回當前時區爲正在創建的日期對象,但我會做在大多數情況下與後端的時區轉換。

0

建立到Jhurisman的答案。如果你想爲設定日期的時間以及使用以下命令:

var dateParts = mysqlDate; 
var timeParts = dateParts[2].substr(3).split(":"); 

var jsDate = new Date(
       dateParts[0], 
       dateParts[1] - 1, 
       dateParts[2].substr(0,2), 
       timeParts[0], 
       timeParts[1], 
       timeParts[2] 
      ); 
20

最短的和快速的方法:

var mySQLDate = '2015-04-29 10:29:08'; 
new Date(Date.parse(mySQLDate.replace('-','/','g'))); 
+0

終於一個班輪!謝謝! – arod 2015-10-06 23:02:14

+0

好戲!非常感謝你! – nobody 2016-03-28 15:31:38

+0

沒有爲我工作。我將替換語句更改爲:replace(/ [ - ]/g,'/') – 2017-11-02 12:37:39

2

在AngularJS這樣,由於@Jonas Sciangula街

.filter('toJSDate', function(){ 
     return function (dateString) { 
      return new Date(Date.parse(dateString.replace('-','/','g'))) 
     }; 
    }) 
1

mySqlDate格式爲「yyyy-mm-dd」。

var javaDate = new Date(mySqlDate); 

這行代碼工作正常,我。

+0

也可以使用「yyyy-mm-dd hh:ii:ss」格式 – ling 2017-08-15 19:19:17

0

雖然JS不具備足夠的基本工具,要做到這一點,這是很簡單的使用

/** 
 
* Ashu, You first need to create a formatting function to pad numbers to two digits… 
 
**/ 
 
function twoDigits(d) { 
 
    if(0 <= d && d < 10) return "0" + d.toString(); 
 
    if(-10 < d && d < 0) return "-0" + (-1*d).toString(); 
 
    return d.toString(); 
 
} 
 

 

 
Date.prototype.toMysqlFormat = function() { 
 
    return this.getUTCFullYear() + "-" + twoDigits(1 + this.getUTCMonth()) + "-" + twoDigits(this.getUTCDate()) + " " + twoDigits(this.getUTCHours()) + ":" + twoDigits(this.getUTCMinutes()) + ":" + twoDigits(this.getUTCSeconds()); 
 
}; 
 

 

 
var date = new Date(); 
 

 
document.getElementById("date").innerHTML = date; 
 
document.getElementById("mysql_date").innerHTML = date.toMysqlFormat(); 
 
console.log(date.toMysqlFormat());
Simple date:<div id="date"></div> 
 

 
Converted Mysql Fromat: <div id="mysql_date"></div>