我想让用户使用JavaScript轻松添加和减少日期,以便按日期浏览其条目。如何使用JavaScript添加/减少日期?
日期格式为:“mm/dd/yyyy”。我希望他们能够点击“下一步”按钮,如果日期是:“2012年6月1日”,然后点击下一步,它应该变成:“2012年6月2日”。如果他们点击'prev'按钮,那么它应该变成“05/31/2012”。
它需要跟踪的闰年,在一个月的天数等
任何想法? P使用AJAX从服务器获取日期不是一个选项,它有点滞后,而不是客户需要的用户体验。
我想让用户使用JavaScript轻松添加和减少日期,以便按日期浏览其条目。如何使用JavaScript添加/减少日期?
日期格式为:“mm/dd/yyyy”。我希望他们能够点击“下一步”按钮,如果日期是:“2012年6月1日”,然后点击下一步,它应该变成:“2012年6月2日”。如果他们点击'prev'按钮,那么它应该变成“05/31/2012”。
它需要跟踪的闰年,在一个月的天数等
任何想法? P使用AJAX从服务器获取日期不是一个选项,它有点滞后,而不是客户需要的用户体验。
代码:
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);
使用日期选择器:
$("#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();
可能出现得心应手额外的东西:
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
为什么要创建第三个新日期:var nd = new Date(newdate)??日期对象newdate由.setDate调整就好了,不是吗? –
@KevinM yep,取决于目的,所以'nd'是新日期'var'是为了清晰起见而创建的! ':)' –
您可以使用本机javascript Date对象来跟踪日期。它会给你当前的日期,让你跟踪日历特定的东西,甚至帮助你管理不同的时区。您可以添加和减少天/小时/秒来更改您正在使用的日期或计算新日期。
看看这个对象的引用,以了解更多:
希望帮助!
startdate.setDate(startdate.getDate() - daysToSubtract);
startdate.setDate(startdate.getDate() + daysToAdd);
可能这将有助于
<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);" />
中的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,这将有助于解析,做日期数学,格式化......
不要带日期的人东西。只需使用moment.js并保存你的头发。 –
与JavaScript的日期工作是件有点麻烦的。我总是最终使用一个库。 Moment.js和XDate都是伟大的:
小提琴:
var $output = $('#output'),
tomorrow = moment().add('days', 1);
$('<pre />').appendTo($output).text(tomorrow);
tomorrow = new XDate().addDays(-1);
$('<pre />').appendTo($output).text(tomorrow);
我看过times.js在日期间隔(差异)中计算无效月数的时间 - 例如,2014年2月13日至2016年3月15日期间 - moment.js会报告有26几个月,大多数内置Date或DateTime类的内置语言都会报告与25相同的时间间隔,但XDate似乎可以正确计算该时间间隔。 – AndrewPK
//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/
所有这些添加日期的函数都是错误的。您将错误的月份传递给日期函数。有关该问题的更多信息: http://www.domdigger.com/blog/?p=9
您需要使用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);
我喜欢的方式,就是如果你有一个约会对象,你可以从中减去另一个日期对象获得的差异。日期对象基于某个日期的毫秒数。
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你把日期对象到毫秒格式。
东西我使用(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);
});
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方法。
如果您使用的是datepicker。然后'dateValue = $ .datepicker.parseDate(“mm/dd/yy”,'06/01/2012');''dateValue.setDate(dateValue.getDate()+1);' –