时刻 js 不显示本地时间它在数据库中显示相同
moment js not showing local time it's showing same in the Database
如何根据当地时区显示createdAt字段日期。我试过它只适用于本地主机,当我将它上传到服务器时它显示 createdAt 字段数据 UTC 格式。
这是我的代码
dateFormatwithSec(date_time) {
const testDateUtc = moment.utc(date_time);
const localDate = moment(testDateUtc).local();
return localDate.format('YYYY-MM-DD HH:mm:ss');
},
为什么它没有在服务器上提供正确的输出。
这不是一个答案,它实际上是一个扩展评论。 OP 应包括一个示例 date_time 字符串、OP 中的实际输出和预期输出,而不是注释中。
在知道这一点之前,没有人能理解“它没有在服务器上提供正确的输出”是什么意思。
这是对正在发生的事情的解释,希望对您有所帮助。
Moment 的 utc 方法使其将时间戳显示为 UTC。对于解析,它只会在时间戳中没有偏移量时才使用 UTC。因此,给定一个像“2021-12-02 15:15:33”这样的时间戳,它会 return 一个时间对象,其日期的时间值等于 2021-12-02T15:15:33+00: 00.
local 方法使 moment 显示本地时区中的日期。注意这里的“本地”是指根据系统设置,不是系统的实际位置。
考虑以下内容,其中添加了 Z 标记以显示该时刻用于对象的偏移量:
function dateFormatwithSec (date_time) {
// Set moment to UTC mode and parse the input string as UTC
let testDateUtc = moment.utc(date_time);
console.log('testDateUtc: ' + testDateUtc.format('YYYY-MM-DD HH:mm:ss Z'));
// Set the moment object to local mode and return a formatted date
let localDate = moment(testDateUtc).local();
return localDate.format('YYYY-MM-DD HH:mm:ss Z');
}
let ts = '2021-12-02 15:15:33+04:00';
console.log('localDate : '+ dateFormatwithSec(ts));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
PS。解析字符串时,最好同时提供格式,因此:
moment.utc(date_time, 'YYYY-MM-DD HH:mm:ss')
优先。它还允许维护者看到预期的格式(尽管它也应该在文档中)。即使对格式进行非常小的更改也会导致瞬间回退到实现的内置解析器,例如'2021-12-02 15:15:33+04:00' 对比 '2021-12-02 15:15:33 +04:00'.
我从 RobG 的想法中找到了一个简单的解决方案。它对我很有效。我做了什么。
function dateFormatwithSec (date_time) {
const dateutc = date_time.replace('Z', '');
// console.log(dateutc);
const dt = new Date(`${dateutc}Z`);
const finaldate = moment(dt).format('L, h:mm ss a');
//display local time with moment
console.log( "local time is - " , finaldate)
return finaldate ;
}
let ts = '2021-12-03T18:34:17.000Z';
dateFormatwithSec(ts);
"local time is - ", "12/04/2021, 12:04 17 am"
如何根据当地时区显示createdAt字段日期。我试过它只适用于本地主机,当我将它上传到服务器时它显示 createdAt 字段数据 UTC 格式。
这是我的代码
dateFormatwithSec(date_time) {
const testDateUtc = moment.utc(date_time);
const localDate = moment(testDateUtc).local();
return localDate.format('YYYY-MM-DD HH:mm:ss');
},
为什么它没有在服务器上提供正确的输出。
这不是一个答案,它实际上是一个扩展评论。 OP 应包括一个示例 date_time 字符串、OP 中的实际输出和预期输出,而不是注释中。
在知道这一点之前,没有人能理解“它没有在服务器上提供正确的输出”是什么意思。
这是对正在发生的事情的解释,希望对您有所帮助。
Moment 的 utc 方法使其将时间戳显示为 UTC。对于解析,它只会在时间戳中没有偏移量时才使用 UTC。因此,给定一个像“2021-12-02 15:15:33”这样的时间戳,它会 return 一个时间对象,其日期的时间值等于 2021-12-02T15:15:33+00: 00.
local 方法使 moment 显示本地时区中的日期。注意这里的“本地”是指根据系统设置,不是系统的实际位置。
考虑以下内容,其中添加了 Z 标记以显示该时刻用于对象的偏移量:
function dateFormatwithSec (date_time) {
// Set moment to UTC mode and parse the input string as UTC
let testDateUtc = moment.utc(date_time);
console.log('testDateUtc: ' + testDateUtc.format('YYYY-MM-DD HH:mm:ss Z'));
// Set the moment object to local mode and return a formatted date
let localDate = moment(testDateUtc).local();
return localDate.format('YYYY-MM-DD HH:mm:ss Z');
}
let ts = '2021-12-02 15:15:33+04:00';
console.log('localDate : '+ dateFormatwithSec(ts));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
PS。解析字符串时,最好同时提供格式,因此:
moment.utc(date_time, 'YYYY-MM-DD HH:mm:ss')
优先。它还允许维护者看到预期的格式(尽管它也应该在文档中)。即使对格式进行非常小的更改也会导致瞬间回退到实现的内置解析器,例如'2021-12-02 15:15:33+04:00' 对比 '2021-12-02 15:15:33 +04:00'.
我从 RobG 的想法中找到了一个简单的解决方案。它对我很有效。我做了什么。
function dateFormatwithSec (date_time) {
const dateutc = date_time.replace('Z', '');
// console.log(dateutc);
const dt = new Date(`${dateutc}Z`);
const finaldate = moment(dt).format('L, h:mm ss a');
//display local time with moment
console.log( "local time is - " , finaldate)
return finaldate ;
}
let ts = '2021-12-03T18:34:17.000Z';
dateFormatwithSec(ts);
"local time is - ", "12/04/2021, 12:04 17 am"