(健全性检查)这个简单用例是否需要时区库?
(Sanity Check) Do I need a timezone library for this simple use case?
这将是我第一次使用时区,我听说这是很多开发人员的主要痛点,所以我提出这个问题作为完整性检查以确保我没有遗漏任何东西。
我的用例相当“简单”,我想要一个日期时间选择器,用户可以在其中选择他们当地时区的日期和时间(换句话说,他们在选择器中看到的内容与他们计算机的日期相匹配时间设置为)。
然后我想把这个选择的日期和时间,转换成UTC发送到服务器保存。
当用户访问某些页面时,我将从服务器返回的 UTC date/time 转换为用户的本地 date/time 并以用户友好的方式显示给他们。
为此,我是否需要像 moment timezone
这样的库,或者像 Intl.DateTimeFormat
、new Date().getTimezoneOffset()
等浏览器的本机日期方法就足够了吗? (我只需要支持最新的现代浏览器,所以我是从“它能满足我的需要”的角度而不是浏览器支持 POV 的角度来问这个问题)。
看来我只需要两件事:
- 一种从 UTC 获取用户时区偏移的方法(因此我可以将他们的本地时间转换为 UTC 以发送到服务器,并将 UTC 转换回他们的本地时间以在某些页面上显示给他们)
- 一种让他们的时区缩写(EST、PDT、CDT 等)显示在 UI
中的方法
我需要图书馆吗?如果不是,为什么人们仍然使用如此大的库来处理时区?
对于您提到的功能,您不需要时区库。
// Get a Date object from your date picker, or construct one
const d1 = new Date("2020-08-02T10:00");
// Convert it to a UTC-based ISO 8601 string for your back-end
const utcString = d1.toISOString();
// Later, you can create a new Date object from the UTC string
const d2 = new Date(utcString);
// And you can display it in local time
const s1 = d2.toString();
// Or you can be a bit more precise with output formatting if you like
const s2 = d2.toLocaleString(undefined, {timeZoneName: 'short'});
console.log("UTC: ", utcString);
console.log("Local Time (default string): ", s1);
console.log("Local Time (intl-based string): ", s2);
请记住,并非所有时区都有缩写,因此这些时区会给出类似“GMT+3”的输出。
这将是我第一次使用时区,我听说这是很多开发人员的主要痛点,所以我提出这个问题作为完整性检查以确保我没有遗漏任何东西。
我的用例相当“简单”,我想要一个日期时间选择器,用户可以在其中选择他们当地时区的日期和时间(换句话说,他们在选择器中看到的内容与他们计算机的日期相匹配时间设置为)。
然后我想把这个选择的日期和时间,转换成UTC发送到服务器保存。
当用户访问某些页面时,我将从服务器返回的 UTC date/time 转换为用户的本地 date/time 并以用户友好的方式显示给他们。
为此,我是否需要像 moment timezone
这样的库,或者像 Intl.DateTimeFormat
、new Date().getTimezoneOffset()
等浏览器的本机日期方法就足够了吗? (我只需要支持最新的现代浏览器,所以我是从“它能满足我的需要”的角度而不是浏览器支持 POV 的角度来问这个问题)。
看来我只需要两件事:
- 一种从 UTC 获取用户时区偏移的方法(因此我可以将他们的本地时间转换为 UTC 以发送到服务器,并将 UTC 转换回他们的本地时间以在某些页面上显示给他们)
- 一种让他们的时区缩写(EST、PDT、CDT 等)显示在 UI 中的方法
我需要图书馆吗?如果不是,为什么人们仍然使用如此大的库来处理时区?
对于您提到的功能,您不需要时区库。
// Get a Date object from your date picker, or construct one
const d1 = new Date("2020-08-02T10:00");
// Convert it to a UTC-based ISO 8601 string for your back-end
const utcString = d1.toISOString();
// Later, you can create a new Date object from the UTC string
const d2 = new Date(utcString);
// And you can display it in local time
const s1 = d2.toString();
// Or you can be a bit more precise with output formatting if you like
const s2 = d2.toLocaleString(undefined, {timeZoneName: 'short'});
console.log("UTC: ", utcString);
console.log("Local Time (default string): ", s1);
console.log("Local Time (intl-based string): ", s2);
请记住,并非所有时区都有缩写,因此这些时区会给出类似“GMT+3”的输出。