4 javascript typescript angular angular8 angular9
我正在寻找一种方法
将建造/声明时的全新日期转换为太平洋标准时间。(无需团队中的每个开发人员手动设置时区)
此外,当以 HTMLconsole.log等格式显示时,显示的日期应以太平洋时区显示
let test = new Date(2019, 3, 5);
console.log(test);
Run Code Online (Sandbox Code Playgroud)如何才能做到这一点?Angular 中是否有全局参数来设置它,也许在配置文件中?
*我们在代码库中有 500 行日期代码,需要进行这种全局转换。有时当人们在不同的时区工作时,应用程序会呈现不同的时区日期。需要更正以前人的代码。
当前无法将这些行转换为 Moment,在当前代码库中使用 Date。
另外,这会是一个合适的解决方案吗?tzutil /s "Pacific Standard Time",刚刚在谷歌了解到这个
我完全同意@Adrian Brand。此外,这不是 Angular 问题。它更像是您在应用程序中处理日期时间的方式。
根据我的经验。使用内置的 JavaScript Date 来做这个日期时间的事情总是很棘手。
此外,为了处理太平洋时间,您可能需要处理夏令时。这本身就是另一个问题。
太平洋时区 (PT) 是一个时区,包括加拿大西部、美国西部和墨西哥西部的部分地区。该区域中的地方通过从协调世界时减去八小时来遵守标准时间
(UTC?08:00)。在夏令时期间,使用时间偏移量UTC?07:00。
我假设您仍然将数据作为ISO格式发送到服务器。
所以我在新加坡,请参阅以下普通日期构造函数的结果。
var date = new Date(2019, 3, 5). //Fri Apr 05 2019 00:00:00 GMT+0800 (Singapore Standard Time)date.toISOString()// 2019-04-04T16:00:00.000Z. 因为新加坡+08:00比 UTC 早 8 小时。因此,如果您希望始终执行 new Date 以产生 PST 时间,这意味着
var date = new Date(2019, 3, 5) // Fri Apr 05 2019 00:00:00 GMT-0700 (Pacific Standard Time)date.toISOString()// 2019-04-05T08:00:00.000Z. 因为 PST-08:00比 UTC 晚 8 小时。夏令时的话题-07:00,我留给你。你要么需要
如果您使用确切日期作为构造函数var date = new Date(2019, 3, 5)。您可以添加一个新的方法调用toPSTString()并使用正则表达式替换()toPacific Standard Time和GMT+xxxto里面的文本,GMT-08:00因为日期的值是绝对的。
Date.prototype.toPSTString = function () {
let date = this.toString();
//date.replace.... easy part, you could use Regex to do it
return date;
};
Run Code Online (Sandbox Code Playgroud)
但是,如果您在构造函数中传递了 ISO 字符串格式的日期或毫秒数。处理起来会非常棘手。例如,如果你这样做new Date("2019-04-05T07:00:00.000Z"),你想看到什么?
请参阅下文,了解我如何根据偏移量差异输出 ISO 字符串。它可能会给你一些想法/
new Date将始终在您的本地机器时区工作。所以如果我在新加坡,我会的new Date(2019, 3, 5).toISOString(),它总会给我2019-04-04T16:00:00.000Z,而不是2019-04-05T08:00:00.000Z你所期望的。
您还可以覆盖 JS 函数以输出 UTC 日期,但要考虑 PST 时间。
Date.prototype.toPSTString = function () {
function convertMinuteToMillisecond(mins) {
return mins * 60 * 1000;
}
let localDateOffsetToUtc = this.getTimezoneOffset(); //the offset between the user local timezone with UTC. In my use case of Singapore, it give me -480.
const offSetBetweenPSTAndUTC = 480;
let offsetBetweenPSTAndLocal = offSetBetweenPSTAndUTC - localDateOffsetToUtc;
let newDate = new Date(
this.getTime() + convertMinuteToMillisecond(offsetBetweenPSTAndLocal)
);
return newDate.toISOString();
};
var date = new Date(2019, 3, 5);
date.toISOString(); //"2019-04-04T16:00:00.000Z" Singapore
date.toPSTString(); //"2019-04-05T08:00:00.000Z" PST
Run Code Online (Sandbox Code Playgroud)
输出看起来正确。我还没有真正测试过它,但希望你能明白。
但通常,如果您在新加坡,您希望看到新加坡时区的日期。没有人关心 PST 时区。同样,如果您在伦敦,您不想看到新加坡或 PST 时区的时间。我想你可能想考虑一下。因为如果您的应用程序不断发展壮大,解决此类问题将变得越来越困难。
我在我的博客中写了我如何处理时区和语言环境。在我的用例中,我使用moment.js并且服务器端需要在这方面支持我。如果你想有更多的想法,你也可以看看。
| 归档时间: |
|
| 查看次数: |
6494 次 |
| 最近记录: |