2011-02-24 135 views
1

我想要一个输入字段,旁边有一个按钮。从输入字段中减去日期

在输入字段我将进入这样一个日期:2011-07-08

而当我打的按钮,它应该读的时候已经在输入字段,用3减去它几个月和一天。

这可能吗?

在此先感谢

回答

1

是的。首先,你阅读的日期和你转换成日期对象

var dateString = document.getElementById('id of your field').value, 
    date = new Date(dateString); 

然后你减去91天并输出结果

date.setDate(date.getDate() - 91); 
alert(date.toString()); 

在这里,我假设为简单起见,你真正想要91天而不是3个月和一天。如果你想三个月,有一天你会做

date.setMonth(date.getMonth() - 3); 
date.setDate(date.getDate() - 1); 
alert(date.toString()); 

Date对象将溢出的照顾,闰年和一切。

如果你想将其写入到同一领域,采取零的照顾,你可以做

function assureTwoDigits(number) { 
    if (number > 9) { 
     return '-' + number; 
    } 
    else { 
     return '-0' + number; 
    } 
} 

并更改最后一行

document.getElementById('id of your field').value = date.getFullYear() + assureToDigits(date.getMonth()) + assureTwoDigits(date.getDate()); 
+1

几乎同样的事情,但在一个新的对象:'B =新的日期(a.getFullYear(),a.getMonth() - 3,a.getDate ()-1);'另外,请注意输入到'new Date(string)'的字符串格式支持取决于浏览器。 – some 2011-02-24 11:14:13

+0

感谢您的帮助,但这会导致包含日期的警告框。我想要的只是将字段从一个日期更改为另一个日期。 例如:2011-02-24 - >>按钮 - >> 2010-11-25 – Dreni 2011-02-24 11:19:48

+0

当然,警报是一个例子。一个你有字符串的日期,你可以把它放在任何你想要的地方。在你的情况下,你会用'document.getElementById('field''id')代替最后一行。value = date.toString();' – Andrea 2011-02-24 11:21:38

0

可以使用Date对象(见here):

  1. 提取物年,蛾和天从字符串(使用正则表达式或分裂由 ' - ')
  2. 用该数据构建新的Date对象
  3. 减去日期间隔
  4. 构建字符串返回
0

最简单的方法是把它分解进入一个数组,然后使用几个if/else语句:

var date = (whatever you're pulling the date in as).split('-'); 
if (date[1] > 3) 
    date[1] = date[1] - 3; 
else 
    date[0] = date[0] - 1; 
    var dateOverflow = date[1]-3; 
    date[1] = 12 - dateOverflow; 

然后这些日子也是一样的。

+0

你可以肯定你会在某个日期得到这个错误,你必须要照顾闰年,并记住他们每4年发生一次,但不是在世纪之交,除了每一次4个世纪......幸运的是,JavaScript有日期对象,为您照顾所有这些东西! – Andrea 2011-02-24 11:18:47

+0

Bah,愚蠢的闰年,总是为所有人搞乱了一切:P 你是对的。 – Trezoid 2011-02-24 11:20:39

0

是的,这是可能的,它是最干净的,如果你可以做到这一点没有一些神秘的正则表达式魔法。按日期转换为Date对象开始:

// this will get you a date object from the string: 
var myDate = new Date("2011-07-08"); 

// subtract 3 months and 1 day 
myDate.setMonth(myDate.getMonth()-3); 
myDate.setDay(myDate.getMonth(), myDate.getDay()-1); 

// And now you have the day and it will be correct according to the number of days in a month etc 
alert(myDate);