将存储在MySQL中的momentjs日期时间(UTC格式)转换为本地日期时间

3

我在mysql表中有一个名为registerdate的列,类型为datatime。

假设现在时间是当地时间"2015-10-10 06:00:00"。

在数据库中,我存储的是UTC时间,因此它会转换为当地时间+530 GMT的"2015-10-10 00:30:00"。所以正确的时间已经存储在数据库中。

当我检索注册时间时,如何将其转换为当地时间。

这是我在保存datetime到数据库之前的转换方式:

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")

我哪一步做错了。
2个回答

5

我认为使用JavaScript来保存MySQL中的日期时间不是一个好主意。我认为更好的办法是使用MySQL函数UTC_TIMESTAMP()。例如:

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

现在,当您从MySQL检索UTC日期时间时,您可以像这样将其转换为Moment对象:
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 datetime时,您可以简单地使用此方法:

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

注意:请原谅我的糟糕英语。

注意:请原谅我的糟糕英语。


2
您可能根本不需要使用moment。如果从数据库中获取的日期是有效日期,则只需执行以下操作:

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假定你提供了本地时间。如果想强制JS将输入值视为UTC时间,可以在字符串末尾添加“Z”。当一个时间末尾加上“Z”(Zulu)时,表示该时间是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>

如果你需要使用moment代替new Date("2015-10-10 00:30:00Z"),你可以这样做:moment("2015-10-10 00:30:00Z")。希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接