在JavaScript中减去日期的天数
有谁知道一个简单的方法来取一个日期(如今天)和回X日?
所以,例如,如果我想要在今天5天之前计算日期。
尝试这样的事情:
var d = new Date(); d.setDate(d.getDate()-5);
请注意,这会修改日期对象并返回更新日期的时间值。
var d = new Date(); document.write('Today is: ' + d.toLocaleString()); d.setDate(d.getDate() - 5); document.write('<br>5 days ago was: ' + d.toLocaleString());
var dateOffset = (24*60*60*1000) * 5; //5 days var myDate = new Date(); myDate.setTime(myDate.getTime() - dateOffset);
如果您在整个Web应用程序中执行很多令人头痛的日期操作, DateJS将使您的生活变得更加轻松:
它是这样的:
var d = new Date(); // today! var x = 5; // go back 5 days! d.setDate(d.getDate() - x);
我注意到,getDays + X在日/月边界上不起作用。 只要您的日期不在1970年以前,使用getTime就可以工作。
var todayDate = new Date(), weekDate = new Date(); weekDate.setTime(todayDate.getTime()-(7*24*3600000));
我为Date创建了这个原型,这样我就可以通过负值来减去天数和正值来增加天数。
if(!Date.prototype.adjustDate){ Date.prototype.adjustDate = function(days){ var date; days = days || 0; if(days === 0){ date = new Date( this.getTime() ); } else if(days > 0) { date = new Date( this.getTime() ); date.setDate(date.getDate() + days); } else { date = new Date( this.getFullYear(), this.getMonth(), this.getDate() - Math.abs(days), this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds() ); } this.setTime(date.getTime()); return this; }; }
所以,使用它我可以简单地写:
var date_subtract = new Date().adjustDate(-4), date_add = new Date().adjustDate(4);
将日期分成几部分,然后用调整后的值返回一个新的日期
function DateAdd(date, type, amount){ var y = date.getFullYear(), m = date.getMonth(), d = date.getDate(); if(type === 'y'){ y += amount; }; if(type === 'm'){ m += amount; }; if(type === 'd'){ d += amount; }; return new Date(y, m, d); }
请记住,这几个月是零基础,但时间不是。 即新日期(2009,1,1)== 2009年2月1日,新日期(2009,1,0)== 2009年1月31日;
我喜欢在毫秒内做数学。 所以使用Date.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
如果你喜欢它的格式
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
注意: Date.now()
在旧版浏览器中不起作用(例如IE8我认为)。 在这里填充 。
更新2015年6月
@Socketpair指出了我的sl </s>。 正如他/她所说:“每天有23个小时,有25个是由于时区规定的”。
为了扩大这一点,上面的答案将有日光不准确的情况下,如果你想计算5天前的本地日在一个日光节约变化的时区和你
- 假设(错误地)
Date.now()
给你当前LOCAL现在的时间,或者 - 使用
.toString()
返回本地日期,因此与UTC中的Date.now()
基准日期不兼容。
但是,如果你用UTC来计算你的数学,那么它是有效的
答:您希望从NOW(UTC)5天前发出UTC日期
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString
B.您使用Date.UTC()
之外的UTC基准日期而不是“now”
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000; new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
得到moment.js。 所有的酷小孩都用它。 它有更多的格式选项,等等
var n = 5; var dateMnsFive = moment(<your date>).subtract(n , 'day');
可选的! 转换为JS Date对象的角度绑定。
var date = new Date(dateMnsFive.toISOString());
可选的! 格式
var date = dateMnsFive.format("YYYY-MM-DD");
一些现有的解决方案是接近的,但不完全是我想要的。 此函数与正值或负值一起使用,并处理边界情况。
function addDays(date, days) { return new Date( date.getFullYear(), date.getMonth(), date.getDate() + days, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds() ); }
最重要的答案导致了我的代码中的错误,在本月的第一个月,它将在当月设置未来的日期。 这是我做的,
curDate = new Date(); // Took current date as an example prvDate = new Date(0); // Date set to epoch 0 prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set epoch time
管理日期的简单方法是使用Moment.js
您可以使用add
。 例
var startdate = "20.03.2014"; var new_date = moment(startdate, "DD.MM.YYYY"); new_date.add(5, 'days'); //Add 5 days to start date alert(new_date);
var d = new Date(); document.write('Today is: ' + d.toLocaleString()); d.setDate(d.getDate() - 31); document.write('<br>5 days ago was: ' + d.toLocaleString());
我发现getDate()/ setDate()方法的一个问题是,它很容易把所有的东西都变成毫秒,语法有时难以跟上。
相反,我喜欢解决这个事实,即1天= 86,400,000毫秒。
所以,对于你的特定问题:
today = new Date() days = 86400000 //number of milliseconds in a day fiveDaysAgo = new Date(today - (5*days))
奇迹般有效。
我一直使用这种方法来进行30/60/365天的计算。
你可以很容易地推断这个创建几个月,几年的时间单位
对于我来说,所有的组合都可以在下面的代码snipplet中正常工作,这个片段是用于Angular-2的实现,如果你需要添加日子,通过正数的日子,如果你需要减去通过负数的日子
function addSubstractDays(date: Date, numberofDays: number): Date { let d = new Date(date); return new Date( d.getFullYear(), d.getMonth(), (d.getDate() + numberofDays) );
设置日期时,日期转换为毫秒,所以您需要将其转换回日期:
这个方法也考虑到了,新年的变化等等。
function addDays( date, days ) { var dateInMs = date.setDate(date.getDate() - days); return new Date(dateInMs); } var date_from = new Date(); var date_to = addDays( new Date(), parseInt(days) );
你可以使用Javascript。
var CurrDate = new Date(); // Current Date var numberOfDays = 5; var days = CurrDate.setDate(CurrDate.getDate() + numberOfDays); alert(days); // It will print 5 days before today
对于PHP,
$date = date('Ym-d', strtotime("-5 days")); // it shows 5 days before today. echo $date;
希望它会帮助你。
我喜欢以下,因为它是一条线。 DST变化并不完美,但通常足够满足我的需求。
var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
function addDays (date, daysToAdd) { var _24HoursInMilliseconds = 86400000; return new Date(date.getTime() + daysToAdd * _24HoursInMilliseconds); }; var now = new Date(); var yesterday = addDays(now, - 1); var tomorrow = addDays(now, 1);
var d = new Date(); document.write('Today is: ' + d.toLocaleString()); d.setDate(d.getDate() - 100); document.write('<br>100 days ago was: ' + d.toLocaleString());
var daysToSubtract = 3; $.datepicker.formatDate('yy/mm/dd', new Date() - daysToSubtract) ;
var my date = new Date().toISOString().substring(0, 10);
它可以给你只有像2014-06-20的日期。 希望会有所帮助
- 你如何sorting在多列上的数组?
- 如何针对特定情况(如Internet Explorer特定的CSS或特定于Internet Explorer的JavaScript代码)仅针对Internet Explorer 10?
- 何时closuresNodejs中的MongoDB数据库连接
- 在Javascript中replace正则expression式匹配的第n个实例
- JavaScriptasynchronous返回值/赋值与jQuery
- asynchronousJavaScript执行如何发生? 什么时候不用return语句?
- Javascript的等价于Python的values()字典方法
- 数据属性的CSSselect器比类select器更快吗?
- JavaScript的等同于PHP的死亡