首页 > 解决方案 > Javascript将给定时区中的日期转换为本地日期

问题描述

在 Javascript 中,给定一个表示日期的字符串,如下所示:

var dateFromPrague = "2011-10-10T14:48:00"

并且知道上面的日期是来自特定本地化的日期,比如欧洲/布拉格,我怎么能把这个日期翻译成当地的时间?我知道我可以创建一个指示时区偏移的 Date 对象,如下所示:

var dateFromPrague = new Date("2011-10-10T14:48:00.000+02:00");

然后我可以像这样从上面的日期获取本地日期:

var dateFromPragueTolocalDate = dateFromPrague.toString();

但布拉格偏移量并不总是 +02:00,因为它取决于是否应用 DST(夏季或冬季时间)。那么我怎么能指出正确的时区,比如“欧洲/布拉格”,或者以某种方式实现这种翻译(不可能从服务器返回偏移量)?

标签: javascriptdatedatetimetimezone

解决方案


目前JavaScript 本身(或浏览器平台)中没有内置任何东西可以让你做到这一点,不,你在图书馆的土地上。几年后您可能可以使用Temporal,但它仍处于提案过程的早期阶段。提案中链接了一个 polyfill,但您想要使用的部分可能是临时命名的LocalDateTime(不是其最终名称),它仍在进行中。

您可以使用的一个库是Moment Timezone。看起来像这样:

var a = moment.tz(dateFromPrague, "Europe/Prague");

现场示例:

var dateFromPrague = "2011-10-10T14:48:00";
var a = moment.tz(dateFromPrague, "Europe/Prague");
console.log(a.toDate());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.31/moment-timezone-with-data.min.js"></script>


推荐阅读