【问题标题】:Create date from date time and time zone Javascript [duplicate]从日期时间和时区Javascript创建日期[重复]
【发布时间】:2017-07-08 03:17:48
【问题描述】:

给定输入

1) 日期时间:日月年小时和分钟

2) 时区

如何在 UTC 中创建特定时区或日期的 Javascript 日期对象?

还有如何将此日期时间转换为任何其他时区。

是否有任何 Angular 包可以做到这一点。

【问题讨论】:

    标签: javascript angular timezone


    【解决方案1】:

    所以我这样做:

    var offset = -5.0; // my servers UTC offset
    
    var clientDate = new Date();
    var utc = clientDate.getTime() + (clientDate.getTimezoneOffset() * 60000);
    
    var serverDate = new Date(utc + (3600000 * offset));
    var c = $.datepicker.formatDate('mm/dd/yy', serverDate);
    

    在最后一行,我使用 jQuery(通常称为 BootStrap)日期选择器为我设置日期格式。

    这里的关键是offset,它是与 UTC 时间的小时偏移量。

    在 Angular 中你可以使用 dateFilter

     new Date(dateFilter(minDate, 'yyyy-MM-dd\'T\'00:00:00', timezone));
    

    【讨论】:

    • 这可以在 Angular 中完成吗?可能正在使用另一个包
    • Angular 有 dateFilter。是的,它是纯 JavaScript。但我已经看到 Angular 模板实现了同样的方法。
    • 抱歉,这段代码有几个地方有缺陷。了解从.getTime() 返回的时间戳已经采用 UTC。通过使用客户端的当前偏移量对其进行调整,您只是选择了一个不同的时间点。当您尝试将服务器的偏移量添加为Date 构造函数的输入时,情况相同。通过以这种方式移动偏移量,无法让Date 对象表示不同的时区。它仍然会根据运行它的机器的本地时间来格式化输出,包括该时区的 DST 更改。
    • 另外,你不能假设你的服务器的偏移量是 -5,现在可能是这样,但是当 DST 转换发生时,它可以很容易地切换到不同的偏移量。最后,编写完全依赖于服务器时区的代码是一种不好的做法。很抱歉投反对票,但此代码不应传播。
    • 通过偏移量调整基于 utc 的时间戳的术语称为“epoch shift”。这是一种有用的技术,被许多日期库使用,但只有从那时起您使用基于 UTC 的函数(如 .getUTCFullYear() 等)才可接受。任何使用本地时间函数 (日期选择器的日期格式化程序正在执行的操作)将在 DST 转换周围遇到错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2016-08-06
    • 2022-08-22
    • 2023-03-02
    相关资源
    最近更新 更多