将mysql中存储的momentjs datetime(utc格式)格式化为Local DateTime

gho*_*... 3 javascript mysql jquery datetime momentjs

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

说现在的时间是当地时间“2015-10-10 06:00:00”。

在数据库中,我存储的是 UTC 时间,因此它将被转换为“2015-10-10 00:30:00”,因为本地时间是格林威治标准时间 +530。所以正确的时间存储在数据库中。

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

这是我在将日期时间保存到 db 之前的转换方式

moment.utc(new Date()).format("YYYY-MM-DD HH:mm:ss")
Run Code Online (Sandbox Code Playgroud)

这就是我试图将其转换回当地时间。

moment.utc(registerdate, "YYYY-MM-DD HH:mm:ss").local().format("HH:mm:ss")
Run Code Online (Sandbox Code Playgroud)

这不会更改保存的日期并呈现与存储在 db 中的相同。

第二种方法:它进一步减去 5:30 小时而不是增加它。

moment.utc(_obj[i].StartTime).format("HH:mm:ss")
Run Code Online (Sandbox Code Playgroud)

我做错了哪一步。

小智 5

我不认为使用 JavaScript 在 MySQL 中保存日期时间是个好主意。我认为最好使用 MySQL 函数UTC_TIMESTAMP()。例如:

INSERT INTO `ITEMS` (`name`, `date_add`) VALUES ('item name', UTC_TIMESTAMP());
Run Code Online (Sandbox Code Playgroud)

现在,当您从 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   
Run Code Online (Sandbox Code Playgroud)

我看不出你的代码有什么问题。也许它是应用程序方面的东西(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")
Run Code Online (Sandbox Code Playgroud)

注意:请原谅我的英语不好。