【发布时间】:2017-02-08 06:30:16
【问题描述】:
浏览器上 JavaScript 中的日期计算问题。有3个参数 - 从日期、天数和截止日期
从在 JavaScript 中使用日历组件选择的日期 = 30/10/2016 输入天数 = 2
基于没有。应计算输入“截止日期”的天数,因此根据上述输入的起始日期和计算“截止日期”的天数值应为 2016 年 1 月 11 日,但由于一些错误的计算,它显示 2016 年 10 月 31 日.
时区 - 土耳其伊斯坦布尔
请参考下图截取的代码 -
从代码中可以清楚地看出正在使用的原型 JavaScript 库。
dateUtil.prototype.addDays=function(date,noofDays)
{
var _dateData=date.split("/");
var _date=eval(_dateData[0]);
var _month=eval(_dateData[1]);
var _year=eval(_dateData[2]);
var newFormatedDate = new Date(""+_month+"/"+_date+"/"+_year);
var newAddedDate=newFormatedDate.getTime() + noofDays*24*60*60*1000;
var theDate = new Date(newAddedDate);
var dd = theDate.getDate();
var mm = theDate.getMonth()+1; // 0 based
if(mm<10)
mm="0"+mm;
var yy = theDate.getYear();
if (yy < 1000)
yy +=1900; // Y2K fix
var addedDate=""+dd+"/"+mm+"/"+yy;
return addedDate;
}
似乎 noofDays*24*60*60*1000 逻辑是不考虑 DST 的问题。 有 2 个时区显示相同的代码,但日期格式不同。
请您就此提供任何指导或阅读建议。
编辑: 添加了 JavaScript 代码。
【问题讨论】:
-
使用momentjs (momentjs.com/docs) 可以省去不少麻烦。它是一个功能强大的大型图书馆,致力于与时间合作。
-
所有相关代码都应包含在问题本身中,而不是图像中。
-
注意正确拼写
JavaScript,避免与Java发生冲突。 -
评估? 2016 年?这段代码看起来像是 1995 年的东西。当您发布实际代码时,您会得到一些实际答案。 :-)
-
@MikeMcCaughan - 添加了 JavaScript 代码。
标签: javascript html datetime prototypejs timezone-offset