2015-09-17 126 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") 

注意:请原谅我的坏英语。