ing*_*939 11 javascript locale date
我的浏览器(即我的操作系统)应该知道我在澳大利亚以及正确的日期格式是什么.在这种情况下,d/m/y,而不是m/d/y.但是,如果我运行以下代码:
alert(new Date("21/11/1968"))
Run Code Online (Sandbox Code Playgroud)
结果是"1969年9月11日星期四".它认为月份是第一位并相应调整.
为什么是这样?答案总是使用通用格式作为日期函数的输入,还是有办法告诉浏览器期望以我的语言环境格式输入日期?
Koo*_*Inc 16
将日期字符串转换为可提供预期结果的格式('yyyy/mm/dd'或'yyyy-mm-dd')非常简单:
new Date("21/11/1968".split('/').reverse().join('/'));
Run Code Online (Sandbox Code Playgroud)
[ edit ]你可能会喜欢这个更通用的方法(npm PureHelpers库的一部分):
document.querySelector("#result").textContent = `
tryParseDate("2017/03/22", "ymd"); // ${tryParseDate("2017/03/22", "ymd")}
tryParseDate("03/22/2017", "mdy"); // ${tryParseDate("03/22/2017", "mdy")}
tryParseDate("22-03-2017", "dmy"); // ${tryParseDate("22-03-2017", "dmy")}
`;
function tryParseDate(dateStringCandidateValue, format = "dmy") {
if (!dateStringCandidateValue) {
return null;
}
const mapFormat = format.split("").reduce(function(a, b, i) {
a[b] = i;
return a;
}, {});
const dateStr2Array = dateStringCandidateValue.split(/[ :\-\/]/g);
const datePart = dateStr2Array.slice(0, 3);
const datePartFormatted = [
+datePart[mapFormat.y],
+datePart[mapFormat.m] - 1,
+datePart[mapFormat.d]
];
if (dateStr2Array.length > 3) {
dateStr2Array.slice(3).forEach(t => datePartFormatted.push(+t));
}
const dateTrial = new Date(Date.UTC.apply(null, datePartFormatted));
return dateTrial && dateTrial.getFullYear() === datePartFormatted[0] &&
dateTrial.getMonth() === datePartFormatted[1] &&
dateTrial.getDate() === datePartFormatted[2]
? dateTrial
: null;
}Run Code Online (Sandbox Code Playgroud)
<pre id="result"></pre>Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 11
Date对象非常弱.你不能告诉它期望什么格式.你可以用你所说的m/d/y字符串创建它,或者new Date(year, month, day[, hours, seconds, milliseconds]);
new Date(string_date)支持以下日期格式: