瞬间和新的Date()不显示本地时间

时间:2019-07-03 15:53:43

标签: javascript date momentjs

我想显示用户的本地日期,但是对我来说没有任何作用。它总是返回UTC时间。

我尝试过:

  1. 这将返回UTC-此处的偏移量也为零。
let visitDate = moment.utc().format();
let offset = moment().utcOffset();
let visitDate1 = moment.utc(visitDate).utcOffset(offset)
  1. 这将返回UTC
let visitDate = new Date()
let visitDate1 = moment(visitDate).local().format('MM-DD-YYYY hh:mm:ss');
  1. 这将返回UTC
let visitDate = new Date()
let visitDate1 = visitDate.toLocaleDateString()

我尝试了几种方法,但是不管我做什么,我总是得到UTC时间。如果我尝试使用localhost,则它会显示正确的时间,但是一旦托管该页面,它就会显示UTC。

如何转换为本地?

2 个答案:

答案 0 :(得分:2)

moment().local()使用本地计算机的时区,这就是它在本地主机上运行的原因

如果知道的话,我会指定时区:

moment.tz("America/Los_Angeles").format()

答案 1 :(得分:1)

似乎有几个可能的失败点。我将在下面列出我认为的内容,您可以评估它们是否与您的设置相关。

1)处理日期的代码在服务器上执行,而不是在本地执行 我们的大多数Javascript代码都编写为在用户的浏览器中执行,因此这是默认假设。如果这种假设在这种情况下是错误的,并且代码正在服务器上执行,则“本地”表示“在服务器上”。您的服务器应该以UTC时间运行,这可能会产生您所看到的结果。

2)用户正在运行设置为UTC的浏览器 如果您将用于测试的浏览器设置为将UTC视为本地时间,它将产生您所看到的结果。由于您可能在同一台机器上进行本地主机和测试使用,因此这不太可能导致问题出现……但是仍然值得注意。

3)更改日期的显示方式不会更改日期的存储方式 我们用于设置/更改时区的许多工具都会影响日期的显示方式。但是,Javascript中的Date对象是使用Unix时间(以UTC为单位)存储的。当您创建日期对象(即使指定了时区)时,幕后表示形式仍将是整数(表示毫秒数)并且基于UTC。如果要检查存储的值而不是显示的值,那么在测试时,很有可能总是看到UTC。 但是,您在矩库中所做的工作应正确格式化日期。如果要检查力矩对象,则应该会看到希望看到的时区。

如果这三个可能的失败点都不适合您的情况,那么也许它们为您带来了一个主意。 (特别是第三个,即使不是您的情况,也可能感觉在正确的轨道上。)