获取 JavaScript 中的特定时区时间
Fetching Specific TimeZone time in JavaScript
我在印度工作,我想在 Europe/London 中获取时间详细信息。
在下面的代码中,我为初始化 DateTimeFormat 指定了 European/London 时区。
初始化后,我无法单独获取时间值,如小时(24 小时格式)、分钟和秒。
如果我尝试使用 resolvedOptions() 获取小时值,则它会生成“2 位数字”。
我想以 24 小时格式打印小时数,例如“22”:12 :02
有没有办法修改代码?
或者还有其他方法可以将时间值分别提取为小时、分钟和秒。
function getEuropeTime() {
let options = {
timeZone: 'Europe/London',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12: false,
},
formatter = new Intl.DateTimeFormat([], options);
var date = formatter.format(new Date())
var usedOptions = formatter.resolvedOptions();
console.log(usedOptions.hour);
console.log(date);
}
getEuropeTime();
let options = {
timeZone: 'Europe/London',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12: false,
},
formatter = new Intl.DateTimeFormat([], options);
var date=formatter.format(new Date())
var parts = formatter.formatToParts();
console.log(parts)
console.log(parts.find(c=>c.type=='hour').value);
console.log(date)
在这里您可以查看其他部分,例如分钟和秒。 resolvedOptions 仅 returns 用于格式化的选项值。更多详情请看这里intl.DateTimeFormat
您将浏览器默认语言作为默认语言传递,所以您真的不知道时间格式是什么。
在某些情况下,使用浏览器默认设置可能没问题,但这几乎总是不是一个好主意。页面以特定语言显示,因此日期、数字等应遵循该语言的约定,而不是浏览器设置的任何随机语言(由于某些难以理解的原因几乎总是 en-US)。
此外,语言设置通常会覆盖选项,尤其是 hour12 选项。最好的(即最可靠和稳健的)方法是使用 getHours、getMinutes 和 getSeconds[ 根据需要手动设置时间格式=42=] 方法。
如果你真的想使用 Intl.DateTimeFormat 构造函数,那么 select 一种默认使用你想要的格式的语言(CLDR project 可以提供帮助,或者只是测试各种语言标签)。彻底测试它以确保您关注的所有实现都是一致的。
function getEuropeTime(){
return new Date().toLocaleString('en', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
timeZone: 'Europe/London'
});
}
console.log(getEuropeTime());
使用 formatToParts 和手动格式化:
function getEuropeTime(d = new Date()) {
let {hour, minute, second} = new Intl.DateTimeFormat('en', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
timeZone: 'Europe/London'
}).formatToParts(d).reduce((acc, part) => {
acc[part.type] = part.value;
return acc;
}, Object.create(null));
return `${hour}:${minute}:${second}`;
}
console.log(getEuropeTime(new Date(Date.UTC(2020,12,12,15))));
请注意,伦敦遵守夏令时,但欧洲部分地区则不然。此外,欧盟正在考虑完全取消夏令时,因此您可能需要重命名该功能或使用不同的 IANA 代表位置。
我在印度工作,我想在 Europe/London 中获取时间详细信息。 在下面的代码中,我为初始化 DateTimeFormat 指定了 European/London 时区。 初始化后,我无法单独获取时间值,如小时(24 小时格式)、分钟和秒。
如果我尝试使用 resolvedOptions() 获取小时值,则它会生成“2 位数字”。
我想以 24 小时格式打印小时数,例如“22”:12 :02
有没有办法修改代码?
或者还有其他方法可以将时间值分别提取为小时、分钟和秒。
function getEuropeTime() {
let options = {
timeZone: 'Europe/London',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12: false,
},
formatter = new Intl.DateTimeFormat([], options);
var date = formatter.format(new Date())
var usedOptions = formatter.resolvedOptions();
console.log(usedOptions.hour);
console.log(date);
}
getEuropeTime();
let options = {
timeZone: 'Europe/London',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12: false,
},
formatter = new Intl.DateTimeFormat([], options);
var date=formatter.format(new Date())
var parts = formatter.formatToParts();
console.log(parts)
console.log(parts.find(c=>c.type=='hour').value);
console.log(date)
在这里您可以查看其他部分,例如分钟和秒。 resolvedOptions 仅 returns 用于格式化的选项值。更多详情请看这里intl.DateTimeFormat
您将浏览器默认语言作为默认语言传递,所以您真的不知道时间格式是什么。
在某些情况下,使用浏览器默认设置可能没问题,但这几乎总是不是一个好主意。页面以特定语言显示,因此日期、数字等应遵循该语言的约定,而不是浏览器设置的任何随机语言(由于某些难以理解的原因几乎总是 en-US)。
此外,语言设置通常会覆盖选项,尤其是 hour12 选项。最好的(即最可靠和稳健的)方法是使用 getHours、getMinutes 和 getSeconds[ 根据需要手动设置时间格式=42=] 方法。
如果你真的想使用 Intl.DateTimeFormat 构造函数,那么 select 一种默认使用你想要的格式的语言(CLDR project 可以提供帮助,或者只是测试各种语言标签)。彻底测试它以确保您关注的所有实现都是一致的。
function getEuropeTime(){
return new Date().toLocaleString('en', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
timeZone: 'Europe/London'
});
}
console.log(getEuropeTime());
使用 formatToParts 和手动格式化:
function getEuropeTime(d = new Date()) {
let {hour, minute, second} = new Intl.DateTimeFormat('en', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
timeZone: 'Europe/London'
}).formatToParts(d).reduce((acc, part) => {
acc[part.type] = part.value;
return acc;
}, Object.create(null));
return `${hour}:${minute}:${second}`;
}
console.log(getEuropeTime(new Date(Date.UTC(2020,12,12,15))));
请注意,伦敦遵守夏令时,但欧洲部分地区则不然。此外,欧盟正在考虑完全取消夏令时,因此您可能需要重命名该功能或使用不同的 IANA 代表位置。