我想让用户使用JavaScript轻松添加和减去日期,以便按日期浏览他们的条目。
日期格式为:“mm / dd / yyyy”。我希望他们能够点击“下一步”按钮,如果日期是:“06/01/2012”然后点击下一步,它应该变成:“06/02/2012”。如果他们点击“上一步”按钮,那么它应该变成“05/31/2012”。
需要跟踪闰年,月内天数等等。
有什么想法吗?
使用AJAX从服务器获取日期的P.S不是一个选项,它有点滞后,而不是客户想要的用户体验。答案 0 :(得分:89)
<强>代码:强>
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);
使用Datepicker:
$("#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
答案 1 :(得分:38)
您需要使用getTime()
和setTime()
在javascript Date对象中添加或减去时间。使用setDate()
和getDate()
会在达到第1个月,第30个月,第31个等的限制时导致错误。
使用setTime可以设置以毫秒为单位的偏移量,让Date对象计算其余部分:
var now=new Date();
var yesterdayMs = now.getTime() - 1000*60*60*24*1; // Offset by one day;
now.setTime( yesterdayMs );
答案 2 :(得分:15)
startdate.setDate(startdate.getDate() - daysToSubtract);
startdate.setDate(startdate.getDate() + daysToAdd);
答案 3 :(得分:7)
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 :(得分: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);" />
答案 5 :(得分: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/
答案 6 :(得分:3)
在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);
答案 7 :(得分: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给出了错误..但是如果我想用ms得到时间我可以使用:
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,您可以将日期对象转换为毫秒格式。
答案 8 :(得分:1)
您可以使用本机javascript Date对象来跟踪日期。它会为您提供当前日期,让您跟踪日历特定的内容,甚至可以帮助您管理不同的时区。您可以添加和减去天/小时/秒来更改您正在使用的日期或计算新日期。
看看这个对象参考了解更多信息:
希望有所帮助!
答案 9 :(得分:1)
添加日期的所有这些功能都是错误的。您将错误的月份传递给Date函数。有关此问题的更多信息: http://www.domdigger.com/blog/?p=9
答案 10 :(得分:1)
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方法。
答案 11 :(得分: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);
});
答案 12 :(得分:0)
出于某些原因,我使用的最佳日期实用程序是date-fns:
Date
格式。包管理器:
"date-fns": "^1.30.1"
代码:
import { addDays, subDays } from 'date-fns'
let today = new Date()
let yesterday = subDays(today, 1)
let tomorrow = addDays(today, 1)
简单又棒。