2015-09-17 79 views
0

我在表中有一個名爲registerdate的列,其中的數據類型爲mysql。以mysql(utc格式)存儲到本地日期時間格式的momentjs datetime

說現在時間是當地時間「2015-10-10 06:00:00」。

在數據庫中,我存儲的是UTC時間,所以它會被轉換爲「2015-10-10 00:30:00」,因爲當地時間是GMT + 530。所以正確的時間存儲在數據庫中。

如何將註冊時間轉換爲本地時間,當我檢索它時。

這是我保存日期時間之前如何轉換爲DB

moment.utc(new Date()).format("YYYY-MM-DD HH:mm:ss") 

這就是我試圖將其轉換回本地時間。

moment.utc(registerdate, "YYYY-MM-DD HH:mm:ss").local().format("HH:mm:ss") 

這不會改變保存的日期,並呈現與存儲在數據庫中相同。

第二種方法:它進一步減去5:30小時而不是增加它。

moment.utc(_obj[i].StartTime).format("HH:mm:ss") 

哪一步我做錯了。

回答

1

你可能根本不需要使用時刻。如果從數據庫裏的日期爲有效日期,所有你需要做的是

var someDate = new Date("2015-10-10 00:30:00"); 
 
$("#content").html(someDate.toString());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="content"> 
 
<div>

你會看到,這給你的本地時間爲JS假設你給它的本地時間。

您可以將「Z」添加到字符串的末尾以強制JS將輸入值視爲UTC時間。當「Z」(祖魯語)上的時間結束上漲,則表明該時間是UTC http://www.wikiwand.com/en/ISO_8601#/Time_zone_designators

var someDate = new Date("2015-10-10 00:30:00Z"); 
 
$("#content").html(someDate.toString());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="content"> 
 
<div>

如果你需要使用時刻 而不是新的日期( 「2015-10-10 00:30:00Z」) 你可以做瞬間(「2015-10-10 00:30:00Z」) 希望這會有幫助

2

我不認爲使用JavaScript這是一個在MySQL中保存日期時間的好主意。我認爲最好使用MySQL函數UTC_TIMESTAMP()。例如:

INSERT INTO `ITEMS` (`name`, `date_add`) VALUES ('item name', UTC_TIMESTAMP()); 

現在,當你檢索從MySQL UTC日期時間,你可以將其轉換爲這樣的時刻對象:

var utc = moment.utc(MYSQL_DATETIME, 'YYYY-MM-DD HH:mm:ss'); 
var local = utc.local(); 
// var local = moment.utc(MYSQL_DATETIME, 'YYYY-MM-DD HH:mm:ss').local(); 
console.log(local.format("HH:mm:ss")); // 15:54:31 
console.log(local.fromNow());   // a minute ago 

我看不出有什麼錯在你的代碼。也許這是應用程序方面的東西(PHP?)。

另一件事。使用不帶參數的方法utc()與調用utc(new Date())相同。所以你可以簡單地使用這個在你的轉換到MySQL日期時間:

//moment.utc(new Date()).format("YYYY-MM-DD HH:mm:ss") 
moment.utc().format("YYYY-MM-DD HH:mm:ss") 

注意:請原諒我的壞英語。