【问题标题】:string to Date object js字符串到日期对象js
【发布时间】:2021-01-20 15:21:12
【问题描述】:

我正在尝试找出如何将字符串转换为 js 中的 Date 对象,并保持与字符串 ex 中写入的时间相同。

我有这个字符串

var time = "2021-01-20T17:30:00" 

我将这个变量从我的网站发布到我在 Heroku 上运行的 nodejs 服务器。

问题是,我想使用日期对象属性,如 time.getHours()、time.getMinutes() 等。但是服务器的时区不同,恰好在我所在的时区之后 1 小时使用该应用程序,因此如果从该字符串创建一个新对象,它将前进 1 小时。 我想保持字符串的相同日期和时间,与服务器的位置无关,因为我只会在我的国家使用这个网站(我可以减去一小时,但如果我改变服务器呢?)。

如果我只是将字符串发回就可以了,但我不能像这样访问 Date 属性。

您能指出我完成此任务的正确方向吗?创建一个新的 Date 对象,它代表与我用来创建它的字符串相同的时间?我找不到我要找的东西。

知道我将使用这个东西的时区,我怎样才能创建一个具有所述时区而不是服务器时区的 Date 对象

谢谢

【问题讨论】:

  • See this answer。这是一个 C# 问题,但仍然与您的问题相关。
  • 感谢您的链接,这就是我想要做的。

标签: javascript node.js date heroku timezone


【解决方案1】:

只需将其传递给日期对象

    var time = "2021-01-20T17:30:00";
    var dt = new Date(time);
    console.log(dt);//Wed Jan 20 2021 17:30:00 GMT-0800 (Pacific Standard Time)

你可以

    dt.getMonth()
    dt.getHours()

【讨论】:

  • 我确实喜欢这样,如果我在本地主机上工作,会发生什么。当我运行 dt.getHours() 将代码推送到服务器时,它会返回 18:30:00,而不是 17:30:00...顺便说一句,当我写我的问题时,我想出了一个想法并检查它是否是可能的,结果是……我已经用这个命令强迫 Heroku 使用与我相同的时区:heroku config:add TZ="Europe/Berlin"。感谢您的快速回复
  • 根据您的服务器,您也可以随时 +1 // 添加时间
  • 是的,我在想……如果我改变服务器会怎样
  • @J0mk - 你在做console.log(dt) 像这里显示的那样吗?如果是这样,您确实可以获得不同的结果,因为规范未定义该行为。此处显示的是 console.log(dt.toString())(基于本地时间)的等价物,但某些实现会与 console.log(dt.toISOString())(基于 UTC)等价。不管怎样,getMonthgetHours 的结果都是一样的。如果您编辑您的问题以充分展示您如何使用它而不仅仅是字符串,我可以详细说明。
【解决方案2】:

在前端创建一个新日期,将您的时间传递到该日期,然后将来自Date 方法的数据发送到后端。

(此外,由于全局变量的泄漏问题,我发现最好使用 letconst 而不是 var。)

const time = "2021-01-20T17:30:00";
const dateTime new Date(time);

const dataToSend = {
  hours: dateTime.getHours(),
  minutes: dateTime.getMinutes(),
  // Any other data you want to send away
};

// Send dataToSend to your backend server

这将使日期在您将其发送到后端之前已经保存在您自己的时区中。

【讨论】:

  • 我不认为我现在可以按照我的需要将 Date 对象以 JSON 格式发回。
  • @J0mk 我刚刚编辑了我的答案,现在应该可以使用了。
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多