在JavaScript中解析日期时得到错误的结果
Getting wrong results parsing dates in JavaScript
我从一个json字符串开始,它看起来像:["2016-05-28", "2016-05-29", "2016-05-30", "2016-05-31"]
我正在尝试将其转换为Saturday 5/28
Sunday 5/29
。
我研究了这些答案,并试图实现相同的答案:为什么Date.parse给出错误的结果?和将字符串中的日期转换为插入数据库的日期对象。
但我得到了错误的一天输出。5/28在周六时显示为Tuesday, 5/28
。
JSFiddle:https://jsfiddle.net/pum40hyx/
这是我的代码,我将日期转换为我想要的字符串:
function convertToNiceDate(inputDate)
{
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var splitString = inputDate.split("-");
currentDate = new Date(splitString[0], splitString[1], splitString[2]);
var day = currentDate.getDate();
var month = currentDate.getMonth();
//this is the problematic line!
var dayOfWeek = days[currentDate.getDay()];
var dateString = dayOfWeek + ", " + month + "/" + day;
return dateString;
}
使用new Date(year, month[, day[, ...)
格式构建新的Date
时,月份的范围为0-11
。因此,在拆分字符串时,一月应该是0
,而不是1
。
月份:表示月份的整数值,从1月的0开始到12月的11。
这里有一个破解的解决方案来证明这一点:
function convertToNiceDate(inputDate)
{
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var splitString = inputDate.split("-");
currentDate = new Date(splitString[0], +splitString[1]-1, splitString[2]);
var day = currentDate.getDate();
var month = currentDate.getMonth() + 1;
//this is the problematic line!
var dayOfWeek = days[currentDate.getDay()];
var dateString = dayOfWeek + ", " + month + "/" + day;
return dateString;
}
document.body.innerHTML = convertToNiceDate('2016-01-01');
您还可以执行以下操作:
function convertToNiceDate(inputDate) {
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var splitString = inputDate.split("-");
currentDate = new Date(inputDate);
var day = currentDate.getUTCDate();
var month = currentDate.getUTCMonth() + 1;
//this is the problematic line!
var dayOfWeek = days[currentDate.getUTCDay()];
var dateString = dayOfWeek + ", " + month + "/" + day;
return dateString;
}
document.body.innerHTML = convertToNiceDate('2016-01-01');
使用setter(也许您应该对所有setter使用parseInt):
var currentDate //with var
= new Date();
currentDate.setFullYear(splitString[0]);
currentDate.setDate(splitString[2]);
currentDate.setMonth(parseInt(splitString[1])-1);
//do something with your date object
我刚刚发现,当您拆分字符串时,日期的月份(此处为splitString[1])总是太远了。我认为这是因为它采用了月份(5)的数组,这将代表6月而不是5月(从1月的0开始)。试试:
currentDate = new Date(splitString.toString());
相关文章:
- 如何知道javascript for语句中的所有结果是否都是错误的
- JScript 错误: 无法分配给函数结果
- json-api和错误结果:无法读取属性'长度'的未定义
- 显示错误结果的Javascript
- javascript使用正则表达式得到错误的结果
- 在页面对象文件中验证sendKeys结果会导致未定义的错误(Protractor)
- YouTube API v3哈希标签搜索错误结果
- jQuery.Validate - 如何将错误结果放在不同的地方
- 检查JavaScript中的日期时间是否相等时出现错误结果
- 转换日期时出现错误结果
- Lodash partialRight padStart映射产生错误结果
- 在javascript中乘法的错误结果
- 用于显示错误结果的JavaScript嵌套
- 什么'这是处理promise对象中错误结果的正确方法
- 显示错误结果的typeOf
- Javascript getDate()和getMonth()返回错误结果
- LokiJS:简单的查找查询返回错误结果
- Bootstrap-datepicker getDate错误结果
- 比较select.val()和span.text()后产生错误结果
- 坐标转换javascript库Pro4js错误结果