浏览器中的JavaScript中的日期计算问题。有3个参数 - 从日期,天数和日期到目前为止
从JavaScript中使用日历组件选择的日期= 2016年10月30日 输入的天数= 2
基于没有。输入的日期"到目前为止"应该计算,以便按照上面的输入日期&计算的天数"到目前为止"价值应该是2016年11月1日,但由于计算错误,它显示的是2016年10月31日。
时区 - 土耳其伊斯坦布尔
请参阅以下图片以查找代码剪切 -
从代码剪切中可以清楚地看到正在使用的原型JavaScript库。
PDO::ATTR_EMULATE_PREPARES

似乎noofDays * 24 * 60 * 60 * 1000逻辑是没有考虑DST的问题。 有2个时区显示相同的代码但具有不同的日期格式。
请您提供任何指导或阅读建议。
修改: 已添加JavaScript代码。
答案 0 :(得分:3)
可能不值得发布代码,因为它有一些根本不应该在新千年中幸存下来的错误。
var _date = eval(_dateDate[0]);
请勿使用 eval 。有少数情况适合,但一般情况下,不要使用它。永远。以上内容与:
相同var _date = _dateDate[0];
然后有:
var newFormatedDate = new Date('' + _month + '/' + _date + '/' + _year)
通过将日期字符串拆分为部分,避免使用Date构造函数解析字符串,从而开始了正确的轨道。但是你通过创建一个新字符串并使用Date解析它来解决这个好工作。只需直接使用零件:
var newFormatedDate = new Date(_year, _month-1, _date)
删除了Date解析的所有变幻莫测,并且更少输入。此外,Date对象没有格式,因此像 date 这样的名称就可以了。
要添加 n 天,只需将它们添加到日期:
var date = new Date(_year, _month-1, _date)
date.setDate(date.getDate() + 2);
所以你的功能可以是:
function dateUtil(){}
/* Add days to a date
** @param {string} date - date string in dd/mm/yyyy format
** @param {number} noofDays - number of days to add
** @returns {Date}
*/
dateUtil.prototype.addDays = function(date, noofDays) {
var dateData = date.split('/');
var date = new Date(dateData[2], dateData[1] - 1, dateData[0]);
date.setDate(date.getDate() + +noofDays);
return date;
}
var d = new dateUtil();
console.log(d.addDays('23/09/2016',3).toLocaleString());
我使用+noofDays
来确保它是一个数字。此外,SO控制台似乎总是在Z时区中将日期写为ISO 8601字符串,因此我使用 toLocaleString 将其保留在主机时区。