2012-06-07 28 views
63

我想让用户使用JavaScript轻松添加和减少日期,以便按日期浏览其条目。如何使用JavaScript添加/减少日期?

日期格式为:“mm/dd/yyyy”。我希望他们能够点击“下一步”按钮,如果日期是:“2012年6月1日”,然后点击下一步,它应该变成:“2012年6月2日”。如果他们点击'prev'按钮,那么它应该变成“05/31/2012”。

它需要跟踪的闰年,在一个月的天数等

任何想法? P使用AJAX从服务器获取日期不是一个选项,它有点滞后,而不是客户需要的用户体验。

+1

如果您使用的是datepicker。然后'dateValue = $ .datepicker.parseDate(“mm/dd/yy”,'06/01/2012');''dateValue.setDate(dateValue.getDate()+1);' –

回答

83

代码:

var date = new Date('2011','01','02'); 
alert('the original date is '+date); 
var newdate = new Date(date); 

newdate.setDate(newdate.getDate() - 7); // minus the date 

var nd = new Date(newdate); 
alert('the new date is '+nd);​ 

JSFiddle Demo

使用日期选择器:

$("#in").datepicker({ 
    minDate: 0, 
    onSelect: function(dateText, inst) { 
     var actualDate = new Date(dateText); 
     var newDate = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()+1); 
     $('#out').datepicker('option', 'minDate', newDate); 
    } 
}); 

$("#out").datepicker();​ 

JSFiddle Demo

可能出现得心应手额外的东西:

getDate() Returns the day of the month (from 1-31) 
getDay() Returns the day of the week (from 0-6) 
getFullYear() Returns the year (four digits) 
getHours() Returns the hour (from 0-23) 
getMilliseconds() Returns the milliseconds (from 0-999) 
getMinutes() Returns the minutes (from 0-59) 
getMonth() Returns the month (from 0-11) 
getSeconds() Returns the seconds (from 0-59) 

很好的链接:MDN Date

+0

为什么要创建第三个新日期:var nd = new Date(newdate)??日期对象newdate由.setDate调整就好了,不是吗? –

+0

@KevinM yep,取决于目的,所以'nd'是新日期'var'是为了清晰起见而创建的! ':)' –

1

您可以使用本机javascript Date对象来跟踪日期。它会给你当前的日期,让你跟踪日历特定的东西,甚至帮助你管理不同的时区。您可以添加和减少天/小时/秒来更改您正在使用的日期或计算新日期。

看看这个对象的引用,以了解更多:

Date

希望帮助!

14
startdate.setDate(startdate.getDate() - daysToSubtract); 


startdate.setDate(startdate.getDate() + daysToAdd); 
4

可能这将有助于

<script type="text/javascript" language="javascript"> 
     function AddDays(toAdd) { 
      if (!toAdd || toAdd == '' || isNaN(toAdd)) return; 
      var d = new Date(); 
      d.setDate(d.getDate() + parseInt(toAdd)); 

      document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear(); 
     } 

function SubtractDays(toAdd) { 
      if (!toAdd || toAdd == '' || isNaN(toAdd)) return; 
      var d = new Date(); 
      d.setDate(d.getDate() - parseInt(toAdd)); 

      document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear(); 
     } 
    </script> 
    ---------------------- UI --------------- 
     <div id="result"> 
     </div> 
     <input type="text" value="0" onkeyup="AddDays(this.value);" /> 
     <input type="text" value="0" onkeyup="SubtractDays(this.value);" /> 
6

中的JavaScript对象Date可以帮助在这里。

第一步是将这些字符串转换为Date实例。这很容易完成:

var str = "06/07/2012"; // E.g., "mm/dd/yyyy"; 
var dt = new Date(parseInt(str.substring(6), 10),  // Year 
        parseInt(str.substring(0, 2), 10) - 1, // Month (0-11) 
        parseInt(str.substring(3, 5), 10)); // Day 

然后,你可以做各种有用的计算。 JavaScript日期了解闰年等。他们使用“日”的理想化概念,即正好是 86,400秒。它们的基础值是自大纪元以来的毫秒数(1970年1月1日午夜)。它可能是The Epoch之前的日期的负数。

更多关于MDN page on Date

你也可以考虑使用库像MomentJS,这将有助于解析,做日期数学,格式化......

+4

不要带日期的人东西。只需使用moment.js并保存你的头发。 –

3

与JavaScript的日期工作是件有点麻烦的。我总是最终使用一个库。 Moment.js和XDate都是伟大的:

http://momentjs.com/

http://arshaw.com/xdate/

小提琴:

http://jsfiddle.net/39fWa/

var $output = $('#output'), 
    tomorrow = moment().add('days', 1); 

$('<pre />').appendTo($output).text(tomorrow); 

tomorrow = new XDate().addDays(-1); 

$('<pre />').appendTo($output).text(tomorrow); 

+0

我看过times.js在日期间隔(差异)中计算无效月数的时间 - 例如,2014年2月13日至2016年3月15日期间 - moment.js会报告有26几个月,大多数内置Date或DateTime类的内置语言都会报告与25相同的时间间隔,但XDate似乎可以正确计算该时间间隔。 – AndrewPK

4
//In order to get yesterday's date in mm/dd/yyyy. 


function gimmeYesterday(toAdd) { 
      if (!toAdd || toAdd == '' || isNaN(toAdd)) return; 
      var d = new Date(); 
      d.setDate(d.getDate() - parseInt(toAdd)); 
var yesterDAY = (d.getMonth() +1) + "/" + d.getDate() + "/" + d.getFullYear(); 
$("#endDate").html(yesterDAY); 
     } 
$(document).ready(function() { 
gimmeYesterday(1); 
}); 

你可以试试这里:http://jsfiddle.net/ZQAHE/

32

您需要使用getTime()setTime()添加或在。减去一个JavaScript Date对象的时间。到达月1,30,31,等的限制时,使用setDate()getDate()会导致错误..

使用时刻设定允许您设置一个以毫秒为单位偏移,并让Date对象图中的其余部分:

var now=new Date(); 
var yesterdayMs = now.getTime() - 1000*60*60*24*1; // Offset by one day; 
now.setTime(yesterdayMs); 
+2

这是为我工作的唯一解决方案。当一个负数用于日指数时,Date构造函数似乎表现得很奇怪。我发现解决这个问题的唯一方法就是直接用毫秒工作 –

+0

最好的解决方案!使用setDate的所有其他解决方案应该是downvoted ...可能已经安全了我很多麻烦... – abimelex

+0

同上。这是最干净和更可靠的解决方案。谢谢@decasteljau – GR7

2

我喜欢的方式,就是如果你有一个约会对象,你可以从中减去另一个日期对象获得的差异。日期对象基于某个日期的毫秒数。

var date1 = new Date(2015, 02, 18); // "18/03/2015", month is 0-index 
var date2 = new Date(2015, 02, 20); // "20/03/2015" 

var msDiff = date2 - date1; // 172800000, this is time in milliseconds 
var daysDiff = msDiff/1000/60/60/24; // 2 days 

所以这就是你如何减去日期。现在,如果你想添加它们? DATE1 + date2的给出了一个错误。但是,如果我想在毫秒的时间我可以使用:

var dateMs = date1 - 0; 
// say I want to add 5 days I can use 
var days = 5; 
var msToAdd = days * 24 * 60 * 60 * 1000; 
var newDate = new Date(dateMs + msToAdd); 

通过减去0你把日期对象到毫秒格式。

0

东西我使用(jQuery的需要),在我的剧本我需要它目前的一天,但你当然可以相应地修改它。

HTML:

<label>Date:</label><input name="date" id="dateChange" type="date"/> 
<input id="SubtractDay" type="button" value="-" /> 
<input id="AddDay" type="button" value="+" /> 

的JavaScript:

var counter = 0; 

$("#SubtractDay").click(function() { 
    counter--; 
    var today = new Date(); 
    today.setDate(today.getDate() + counter); 
    var formattedDate = new Date(today); 
    var d = ("0" + formattedDate.getDate()).slice(-2); 
    var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2); 
    var y = formattedDate.getFullYear(); 
    $("#dateChange").val(d + "/" + m + "/" + y); 
}); 
$("#AddDay").click(function() { 
    counter++; 
    var today = new Date(); 
    today.setDate(today.getDate() + counter); 
    var formattedDate = new Date(today); 
    var d = ("0" + formattedDate.getDate()).slice(-2); 
    var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2); 
    var y = formattedDate.getFullYear(); 
    $("#dateChange").val(d + "/" + m + "/" + y); 
}); 

jsfiddle

0
var date = new Date('your date string here'); // e.g. '2017-11-21' 

var newdate = new Date(date.getTime() + 24*60*60*1000 * days) // days is the number of days you want to shift the date by 

这是添加/跨几个月和几年中减去时工作可靠的解决方案。在花费太多时间来仔细研究getDate和setDate方法并试图调整月/年的变化之后,意识到了这一点。

decasteljau(在这个线程中)已经回答了这个问题,但是只是想强调这个方法的效用,因为90%的答案在那里推荐了getDate和setDate方法。