Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
本地客户端JavaScript数字日期格式(在浏览器中)_Javascript_Date_Format_Client Side_Date Formatting - Fatal编程技术网

本地客户端JavaScript数字日期格式(在浏览器中)

本地客户端JavaScript数字日期格式(在浏览器中),javascript,date,format,client-side,date-formatting,Javascript,Date,Format,Client Side,Date Formatting,因此,对于如何在特定于用户区域设置的客户端JavaScript中获取数字日期格式,我找不到一个好的答案。例如,如果您的语言为“en-US”,我希望获得“MM/DD/YYYY”。可以传递{year:'numeric',month:'2-digital',day:'2-digital',}以最接近用户区域设置的数字格式格式化日期 要获取带有“YYYY”、“MM”和“DD”占位符的日期格式,可以用相应的占位符字符串替换特定的年、月和日 //替换为日期格式,例如“MM/DD/YYYY” const F

因此,对于如何在特定于用户区域设置的客户端JavaScript中获取数字日期格式,我找不到一个好的答案。例如,如果您的语言为“en-US”,我希望获得“MM/DD/YYYY”。

可以传递
{year:'numeric',month:'2-digital',day:'2-digital',}
以最接近用户区域设置的数字格式格式化日期

要获取带有“YYYY”、“MM”和“DD”占位符的日期格式,可以用相应的占位符字符串替换特定的年、月和日

//替换为日期格式,例如“MM/DD/YYYY”
const FALLBACK_DATE_FORMAT='your FALLBACK DATE FORMAT';
//记忆返回值
让cachedNumericFixedWidthDateFormat=null;
函数getNumericFixedWidthDateFormat(){
if(cachedNumericFixedWidthDateFormat!==null){
返回cachedNumericFixedWidthDateFormat;
}
让我们看看格式;
试一试{
const dummyDate=新日期();
dummyDate.setFullYear(1984年);
dummyDate.setMonth(0);
dummyDate.setDate(23);
dateFormat=dummyDate.toLocaleDateString(未定义{
年份:'数字',
月份:“2位”,
日期:“两位数”,
}).替换('1984','YYYY')。替换('01','MM')。替换('23','DD');
}捕捉(错误){
//TODO:监视器错误!
返回回退日期格式;
}
如果(检查IsValidDataFormat(日期格式)){
cachedNumericFixedWidthDateFormat=日期格式;
返回日期格式;
}否则{
//TODO:添加监控!
返回回退日期格式;
}
}
函数checkIsValidDataFormat(日期格式){
const yearCharsMatches=dateFormat.match(/yyy/g);
const monthCharsMatches=dateFormat.match(/MM/g);
const dayCharsMatches=dateFormat.match(/DD/g);
const digitCharMatches=dateFormat.match(/[0-9]/g);
返回yearCharsMatches!==null&&yearCharsMatches.length==1
&&monthCharsMatches!==null&&monthCharsMatches.length==1
&&dayCharsMatches!==null&&dayCharsMatches.length==1
&&digitCharMatches===null;
}
//Ubuntu 20.04上Mozilla Firefox 87.0的输出:
//en US:'MM/DD/YYYY'
//de de:'DD.MM.YYYY'
//es es,es AR,en GB:'DD/MM/YYYY'

log(getNumericFixedWidthDateFormat())虽然很难确定用户的语言环境,但我们可以确定用户的首选语言并将其传递给构造函数以创建日期格式化程序

Date
对象传递给格式化程序的
format
函数,将日期格式化为预先指定的条件

//返回DateTimeFormat构造函数实例的函数。
const createDateFormatter=()=>新的Intl.DateTimeFormat([]{
年份:“2位数”,
月份:“2位”,
日期:“两位数”
});
//今天的当前日期。
const date=新日期();
//创建一个新的格式化程序。
const dateFormatter=createDateFormatter();
//格式化日期。
const formattedDate=dateFormatter.format(日期);

console.log(格式化日期)
navigator.language可能返回也可能不返回用户的首选语言,并且用户可能希望使用与返回的语言相关联的格式以外的格式。最好使用明确的格式。谢谢你提供的信息。这似乎是一个公平的评估:)它有点糟糕,没有任何方式可以得到一个格式,更好地适应用户的设置though@RobG我刚刚发现,您可以直接将选项传递给
Date.toLocaleDateString
而不用使用
navigator.language
。我还没有做足够的研究来告诉你
toLocaleDateString
是否可靠-它可能与
navigator.language
有什么理由使用navigator.languages而不是“default”?嗯,没有。我忽略了空数组的可能性。不过,因为你的问题,我确实发现了,这是我今天学到的新东西。尽管作为
导航器,它不适用于这种情况。语言
可能与浏览器中可用的语言环境相同。请注意,在Intl对象中使用“语言环境”不幸与中的“语言和文化”混淆,它实际上代表一种语言(忽略了每种语言和每个地方都有一种以上的文化共存)。我认为Intl.DateTimeFormat唯一合理的用途是以适当的语言和日历获取日期部分,然后以明确的顺序对其进行格式化。依靠带有扩展名的语言来实现这一点是令人担忧的。@RobG我最初也希望默认值能起作用。出于某种原因,它对我来说不起作用……它选择了en-US,尽管如此我在我的首选项中设置了en GB。我认为,如果您只需要以用户首选格式格式化日期,那么
toLocaleString
是最佳解决方案。在这种情况下,我特别需要带有占位符的格式fyi,这个问题特别是关于将带有占位符的格式设置为字符串,而不是格式化日期。