我有以下javascript函数,它应该在表单日期添加一周并将其存储在表单中以供用户下次点击链接
function changeDate()
{
var start = document.getElementById('start_date').value;
var d = 7;
var myDate=new Date(start);
myDate.setDate(myDate.getDate()+parseInt(d));
document.getElementById('start_date').value = (myDate.getFullYear()) + '-' + (myDate.getMonth()+1) + '-' + (myDate.getDate());
}
我的表单看起来像这样
<?php
$start_date = "2014-09-20";
?>
<form name="myForm" method="post">
<input type="text" name="start_date" id="start_date" value="<?php echo $start_date?>"/>
<a href="#" onclick="changeDate();">Next</a>
</form>
每次用户点击超链接时,此脚本都可以正常工作一周。#34;接下来&#34;,问题发生在月边界。当日期是&#34; 2014-09-27&#34;该脚本正确计算下一个日期并显示&#34; 2014-10-04&#34;。下次单击时会发生此问题,下次脚本失败后月份已更改。我不明白为什么,我试着提醒start_date它是正确的&#34; 2014-10-04&#34;,但是一旦执行新的Date命令,它就会返回一个无效的日期。
/>
奇怪的是它在月边界上没有失败(这实际上是正确计算的)但是下次失败了。我认为这可能与当前月份有关,但是如果我将start_date设置为&#34; 2014-11-03&#34;那么这并不重要。它会继续正确添加,直到我显示日期&#34; 2014-12-01&#34;,但下次会失败。
非常感谢任何帮助
答案 0 :(得分:1)
日期加上一周,简化为:
var oneWeekFromMyDate = new Date(myDate.getTime() + 7 * 24 * 60 * 60 * 1000);
它不适用于闰秒,夏令时开关和其他日历干扰。
编辑:至于您的解决方案,它实际上在我的计算机上运行没有问题:
function changeDate()
{
var start = document.getElementById('start_date').value;
var d = 7;
var myDate=new Date(start);
myDate.setDate(myDate.getDate()+parseInt(d));
document.getElementById('start_date').value = (myDate.getFullYear()) + '-' + (myDate.getMonth()+1) + '-' + (myDate.getDate());
}
&#13;
<form name="myForm" method="post">
<input type="text" name="start_date" id="start_date" value="2014-11-03"/>
<a href="#" onclick="changeDate();">Next</a>
</form>
&#13;
如果它失败了,你可以指定&#34;失败&#34;手段?它会变成一个随机的其他日期,它会在控制台中断开并显示一条错误信息,它会炸毁你后院的一头牛?
答案 1 :(得分:1)
您的问题是浏览器希望2014-09-27
加入2014-9-27
。
这将解决它:
function padNumber(num, length) {
var str = num + "";
while (str.length < length) {
str = "0" + str;
}
return str;
}
function changeDate()
{
var start = document.getElementById('start_date').value;
var d = 7;
var myDate=new Date(start);
myDate.setDate(myDate.getDate()+parseInt(d));
document.getElementById('start_date').value = (myDate.getFullYear()) + '-' + padNumber(myDate.getMonth()+1, 2) + '-' + padNumber(myDate.getDate(), 2);
}
将日期添加到日期的更好方法是:
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds() % 60,
date.getMilliseconds());
}
时间操作的更好方法是http://momentjs.com/。