Javascript:需要帮助从美国中部时间(没有 DST)转换为 America/New_York with DST

标签 javascript date

我从我的 vendor 那里得到一个时间戳,它是美国中部时间但没有夏令时。我需要使用 DST(如果适用)将其转换为 America/New_York。

我尝试只使用常规 JavaScript,然后转向 Moment。我尝试了各种方法,但无法获得我期望的结果。我对几乎所有图书馆都持开放态度。我不必使用 Moment。

以下是我尝试过的众多方法中的三种。

代码片段:

console.log(sendTimeString);
let d = moment(sendTimeString, "MM/DD/YYYY h:mm:ss A"); 
console.log("formatted " + d.clone().tz("America/New_York").format('MM/DD/YYYY h:mm:ss A'));

产生:

2019 年 6 月 12 日上午 6:35:36

格式化为 06/12/2019 6:35:36 AM

那是同一个日期和时间。如果我在下面这样做,我现在会得到正确的答案,但一旦 DST 结束,它就会关闭。即使这行得通,也不过是黑客攻击而已。我想正确地做。

代码片段:

console.log(sendTimeString);
let d = moment(sendTimeString, "MM/DD/YYYY h:mm:ss A");
console.log("formatted " + d.clone().utcOffset(-2).format('MM/DD/YYYY h:mm:ss A'));

产生:

2019 年 6 月 12 日上午 6:35:36

格式化为 06/12/2019 8:35:36 AM

在我看来,这样做的方法是将时间设置为具有硬编码偏移量 -6 的 UTC。然后我会把它与 America/New_York 时区拉起来,一切都会很完美。但显然我没有正确设置:

代码片段:

console.log(sendTimeString);
let d = moment(sendTimeString, "MM/DD/YYYY h:mm:ss A").utcOffset(-6);
console.log("formatted " + d.clone().tz("America/New_York").format('MM/DD/YYYY h:mm:ss A'));

产生:

2019 年 6 月 12 日上午 6:35:36

格式化为 06/12/2019 6:35:36 AM

最佳答案

您的第一次尝试似乎最接近您的预期,您只需指定输入时区即可。

// Take the input from the client, specify the format and their timezone
const input = moment.tz('6/12/2019 6:35:36 AM', 'MM/DD/YYYY h:mm:ss A', 'US/Central')

console.log(input.tz())
console.log(input.format('MM/DD/YYYY h:mm:ss A'))

// Convert to your timezone
const output = input.clone().tz('America/New_York')

console.log(output.tz())
console.log(output.format('MM/DD/YYYY h:mm:ss A'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.26/moment-timezone-with-data.min.js"></script>

关于 parsing ambiguity 的 Moment Timezone 文档可能会解决您对 DST 的担忧。

关于Javascript:需要帮助从美国中部时间(没有 DST)转换为 America/New_York with DST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226089/

相关文章:

javascript - 无法使用 Jquery 访问 API 中的属性

php - 问题发现两次之间的差异。 (PHP/MySQL)

php - MySQL 将员工每天的工作时间与日期联系起来

php - 更改Mysql current_timestamp默认值

javascript - AS3 -ExternalInterface.addCallback,访问未定义的属性

javascript - 将鼠标悬停在图像的某个部分时,使它旁边出现一个 div

没有时区的 JavaScript 日期格式

Java 日期截止时间信息

javascript - 如何检查页面上的所有 vimeo 视频是否都是通过单击按钮播放的?

javascript - HTML/CSS : How to fade the left and right edges of a div?