我注意到JavaScript的新Date()函数在接受多种格式的日期方面非常聪明。
Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")
调用new Date()函数时,我在任何地方都找不到显示所有有效字符串格式的文档。
这用于将字符串转换为日期。如果我们从相反的方面来看,即将日期对象转换为字符串,直到现在,我的印象是JavaScript没有将日期对象格式化为字符串的内置API。
编者按:以下方法是询问者在特定浏览器上的尝试,但通常不起作用;请参阅本页上的答案以了解一些实际解决方案。
今天,我在date对象上使用了toString()方法,令人惊讶的是,它可以将日期格式化为字符串。
var d1 = new Date();
d1.toString('yyyy-MM-dd'); //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy') //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome
在这里,我也找不到任何关于将日期对象格式化为字符串的方法的文档。
列出Date()对象支持的格式说明符的文档在哪里?
懒惰的解决方案是使用带有正确区域代码的Date.toLocaleString
要获取可以运行的匹配区域列表
#!/bin/bash
[ -f bcp47.json ] || \
wget https://raw.githubusercontent.com/pculture/bcp47-json/master/bcp47.json
grep 'tag" : ' bcp47.json | cut -d'"' -f4 >codes.txt
js=$(cat <<'EOF'
const fs = require('fs');
const d = new Date(2020, 11, 12, 20, 00, 00);
fs.readFileSync('codes.txt', 'utf8')
.split('\n')
.forEach(code => {
try {
console.log(code+' '+d.toLocaleString(code))
}
catch (e) { console.log(code+' '+e.message) }
});
EOF
)
# print THE LIST of civilized countries
echo "$js" | node - | grep '2020-12-12 20:00:00'
这里是。。。。列表
af ce eo gv ha ku kw ky lt mg rw se sn sv xh zu
ksh mgo sah wae AF KW KY LT MG RW SE SN SV
样品用途:
(new Date()).toLocaleString('af')
// -> '2020-12-21 11:50:15'
: )
(注意,这可能不是便携式的。)