Ash*_*esh 988 javascript time datetime date
如何Date使用JavaScript 添加当前天数.JavaScript有像.Net这样的内置函数AddDay吗?
Ant*_*nes 1101
您可以创建一个: -
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = new Date();
alert(date.addDays(5));Run Code Online (Sandbox Code Playgroud)
如果需要,这会自动增加月份.例如:
8/31 + 1天将成为9/1.
setDate直接使用的问题在于它是一个变异器,最好避免这种情况.ECMA认为适合Date作为一个可变类而不是一个不可变结构.
spa*_*tes 695
正确答案:
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Run Code Online (Sandbox Code Playgroud)
答案不正确:
这个答案有时会提供正确的结果,但通常会返回错误的年份和月份.此答案唯一有效的时间是您添加天数的日期恰好具有当前年份和月份.
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
Run Code Online (Sandbox Code Playgroud)
证明/例子
// Correct
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
// Bad Year/Month
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
// Bad during DST
function addDaysDstFail(date, days) {
var dayms = (days * 24 * 60 * 60 * 1000);
return new Date(date.getTime() + dayms);
}
// TEST
function formatDate(date) {
return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
}
$('tbody tr td:first-child').each(function () {
var $in = $(this);
var $out = $('<td/>').insertAfter($in).addClass("answer");
var $outFail = $('<td/>').insertAfter($out);
var $outDstFail = $('<td/>').insertAfter($outFail);
var date = new Date($in.text());
var correctDate = formatDate(addDays(date, 1));
var failDate = formatDate(addDaysWRONG(date, 1));
var failDstDate = formatDate(addDaysDstFail(date, 1));
$out.text(correctDate);
$outFail.text(failDate);
$outDstFail.text(failDstDate);
$outFail.addClass(correctDate == failDate ? "right" : "wrong");
$outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong");
});Run Code Online (Sandbox Code Playgroud)
body {
font-size: 14px;
}
table {
border-collapse:collapse;
}
table, td, th {
border:1px solid black;
}
td {
padding: 2px;
}
.wrong {
color: red;
}
.right {
color: green;
}
.answer {
font-weight: bold;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<th colspan="4">DST Dates</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>03/10/2013</td></tr>
<tr><td>11/03/2013</td></tr>
<tr><td>03/09/2014</td></tr>
<tr><td>11/02/2014</td></tr>
<tr><td>03/08/2015</td></tr>
<tr><td>11/01/2015</td></tr>
<tr>
<th colspan="4">2013</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2013</td></tr>
<tr><td>02/01/2013</td></tr>
<tr><td>03/01/2013</td></tr>
<tr><td>04/01/2013</td></tr>
<tr><td>05/01/2013</td></tr>
<tr><td>06/01/2013</td></tr>
<tr><td>07/01/2013</td></tr>
<tr><td>08/01/2013</td></tr>
<tr><td>09/01/2013</td></tr>
<tr><td>10/01/2013</td></tr>
<tr><td>11/01/2013</td></tr>
<tr><td>12/01/2013</td></tr>
<tr>
<th colspan="4">2014</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2014</td></tr>
<tr><td>02/01/2014</td></tr>
<tr><td>03/01/2014</td></tr>
<tr><td>04/01/2014</td></tr>
<tr><td>05/01/2014</td></tr>
<tr><td>06/01/2014</td></tr>
<tr><td>07/01/2014</td></tr>
<tr><td>08/01/2014</td></tr>
<tr><td>09/01/2014</td></tr>
<tr><td>10/01/2014</td></tr>
<tr><td>11/01/2014</td></tr>
<tr><td>12/01/2014</td></tr>
<tr>
<th colspan="4">2015</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2015</td></tr>
<tr><td>02/01/2015</td></tr>
<tr><td>03/01/2015</td></tr>
<tr><td>04/01/2015</td></tr>
<tr><td>05/01/2015</td></tr>
<tr><td>06/01/2015</td></tr>
<tr><td>07/01/2015</td></tr>
<tr><td>08/01/2015</td></tr>
<tr><td>09/01/2015</td></tr>
<tr><td>10/01/2015</td></tr>
<tr><td>11/01/2015</td></tr>
<tr><td>12/01/2015</td></tr>
</tbody>
</table>Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 174
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Run Code Online (Sandbox Code Playgroud)
要小心,因为这可能很棘手.设置"明天"时,它只能起作用,因为它的当前值与"今天"的年份和月份相匹配.但是,设置为"32"之类的日期数字通常仍可正常工作,以便将其移至下个月.
sbr*_*bot 111
我的简单解决方案是:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
Run Code Online (Sandbox Code Playgroud)
这个解决方案没有夏令时的问题.此外,可以添加/分配任何年,月,日等的偏移量.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
Run Code Online (Sandbox Code Playgroud)
是正确的代码.
Jas*_*son 85
这些答案对我来说似乎很困惑,我更喜欢:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
Run Code Online (Sandbox Code Playgroud)
getTime()给出了自1970年以来的毫秒数,86400000是一天中的毫秒数.因此,ms包含所需日期的毫秒数.
使用毫秒构造函数提供所需的日期对象.
suf*_*aib 48
尝试
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
Run Code Online (Sandbox Code Playgroud)
使用setDate()添加日期不会解决您的问题,尝试添加一些日期到2月,如果您尝试添加新的日期,它不会导致您的预期.
小智 38
这是用于在 Javascript 中为特定日期添加天、月和年的方法。
// To add Days
var d = new Date();
d.setDate(d.getDate() + 5);
// To add Months
var m = new Date();
m.setMonth(m.getMonth() + 5);
// To add Years
var m = new Date();
m.setFullYear(m.getFullYear() + 5);
Run Code Online (Sandbox Code Playgroud)
Rum*_*ser 36
花了很多时间试图弄清楚当年的交易是什么,而不是在遵循下面的主要示例时添加.
如果您只想简单地添加n天到您最好的日期:
myDate.setDate(myDate.getDate()+ n);
或者是longwinded版本
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Run Code Online (Sandbox Code Playgroud)
这个今天/明天的事情令人困惑.通过将当前日期设置为新的日期变量,您将弄乱年份值.如果你从原来的日期开始工作,你就不会.
小智 23
我实现的最简单的方法是使用 Date() 本身。`
const days = 15;
// Date.now() gives the epoch date value (in milliseconds) of current date
nextDate = new Date( Date.now() + days * 24 * 60 * 60 * 1000)
Run Code Online (Sandbox Code Playgroud)
`
use*_*265 22
如果可以,请使用moment.js.JavaScript没有非常好的原生日期/时间方法.以下是Moment语法的示例:
var nextWeek = moment().add(7, 'days');
alert(nextWeek);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>Run Code Online (Sandbox Code Playgroud)
参考:http://momentjs.com/docs/#/manipulating/add/
Ser*_*rge 21
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
Run Code Online (Sandbox Code Playgroud)
var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);Run Code Online (Sandbox Code Playgroud)
Nic*_*IEA 18
最简单的答案是,假设需要将 1 天添加到当前日期:
var currentDate = new Date();
var numberOfDayToAdd = 1;
currentDate.setDate(currentDate.getDate() + numberOfDayToAdd );
Run Code Online (Sandbox Code Playgroud)
逐行向您解释此代码的作用:
小智 17
我昨晚创建了这些扩展:
你可以传递正值或负值;
例:
var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);
Date.prototype.addDays = function (num) {
var value = this.valueOf();
value += 86400000 * num;
return new Date(value);
}
Date.prototype.addSeconds = function (num) {
var value = this.valueOf();
value += 1000 * num;
return new Date(value);
}
Date.prototype.addMinutes = function (num) {
var value = this.valueOf();
value += 60000 * num;
return new Date(value);
}
Date.prototype.addHours = function (num) {
var value = this.valueOf();
value += 3600000 * num;
return new Date(value);
}
Date.prototype.addMonths = function (num) {
var value = new Date(this.valueOf());
var mo = this.getMonth();
var yr = this.getYear();
mo = (mo + num) % 12;
if (0 > mo) {
yr += (this.getMonth() + num - mo - 12) / 12;
mo += 12;
}
else
yr += ((this.getMonth() + num - mo) / 12);
value.setMonth(mo);
value.setYear(yr);
return value;
}
Run Code Online (Sandbox Code Playgroud)
sdg*_*sdh 17
为管道运营商设计的解决方案:
const addDays = days => date => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
Run Code Online (Sandbox Code Playgroud)
用法:
// Without the pipeline operator...
addDays(7)(new Date());
// And with the pipeline operator...
new Date() |> addDays(7);
Run Code Online (Sandbox Code Playgroud)
如果您需要更多功能,我建议您查看date-fns库。
Ald*_*ldo 16
短的:
function addDays(date, number) {
const newDate = new Date(date);
return new Date(newDate.setDate(newDate.getDate() + number));
}
console.log({
tomorrow: addDays(new Date(), 1)
});Run Code Online (Sandbox Code Playgroud)
进步:
function addDays(date, number) {
const newDate = new Date(date);
return new Date(newDate.setDate(date.getDate() + number));
}
function addMonths(date, number) {
const newDate = new Date(date);
return new Date(newDate.setMonth(newDate.getMonth() + number));
}
function addYears(date, number) {
const newDate = new Date(date);
return new Date(newDate.setFullYear(newDate.getFullYear() + number));
}
function getNewDate(dateTime) {
let date = new Date();
let number = parseInt(dateTime.match(/\d+/)[0]);
if (dateTime.indexOf('-') != -1)
number = (-number);
if (dateTime.indexOf('day') != -1)
date = addDays(date, number);
else if (dateTime.indexOf('month') != -1)
date = addMonths(date, number);
else if (dateTime.indexOf('year') != -1)
date = addYears(date, number);
return date;
}
console.log({
tomorrow: getNewDate('+1day'),
yesterday: getNewDate('-1day'),
nextMonth: getNewDate('+1month'),
nextYear: getNewDate('+1year'),
});Run Code Online (Sandbox Code Playgroud)
小智 15
你可以试试:
var days = 50;
const d = new Date();
d.setDate(d.getDate() + days)
Run Code Online (Sandbox Code Playgroud)
这应该运作良好。
amp*_*hts 13
最简单的解决方案.
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(days));
return this;
};
// and then call
var newDate = new Date().addDays(2); //+2 days
console.log(newDate);
// or
var newDate1 = new Date().addDays(-2); //-2 days
console.log(newDate1);Run Code Online (Sandbox Code Playgroud)
小智 11
无需使用第二个变量,您可以将x替换为接下来的x天:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
Run Code Online (Sandbox Code Playgroud)
Dil*_*ung 11
就这么简单:
new Date((new Date()).getTime() + (60*60*24*1000));
Run Code Online (Sandbox Code Playgroud)
感谢Jason的回答符合预期,这里是您的代码和AnthonyWJones的便捷格式的混合:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Run Code Online (Sandbox Code Playgroud)
晚会,但如果你使用有一个很棒的插件叫Moment:jQuery那么
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
Run Code Online (Sandbox Code Playgroud)
http://momentjs.com/docs/#/manipulating/
还有很多其他好东西!
编辑:感谢aikeru的评论删除了jQuery参考
为什么这么复杂?
假设您将要添加的天数存储在名为 days_to_add 的变量中。
那么这个简短的应该这样做:
calc_date = new Date(Date.now() +(days_to_add * 86400000));
Run Code Online (Sandbox Code Playgroud)
使用 Date.now() 可以获得以毫秒为单位的实际 unix 时间戳,然后添加尽可能多的毫秒数,以添加天数。一天是 24h 60min 60s*1000ms = 86400000 ms 或 864E5。
老我知道,但有时我喜欢这个:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用JavaScript,不需要jQuery:
var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd);
Formatting to dd/mm/yyyy :
var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();
var someFormattedDate = dd + '/'+ mm + '/'+ y;
Run Code Online (Sandbox Code Playgroud)
减去30天使用时间(24h = 86400000ms)
new Date(+yourDate - 30 *86400000)
Run Code Online (Sandbox Code Playgroud)
new Date(+yourDate - 30 *86400000)
Run Code Online (Sandbox Code Playgroud)
setDate()的mozilla文档并不表示它将处理月末场景.请参阅https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
设置日期()
这就是我需要添加天数时使用setTime()的原因.
我提出的解决方案在夏令时方面存在问题.
通过使用getUTCDate/ setUTCDate代替,我解决了我的问题.
// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
// Make a working copy so we don't mutate the supplied date.
const d = new Date(date);
d.setUTCDate(d.getUTCDate() + num);
return d;
}
Run Code Online (Sandbox Code Playgroud)
我使用类似的东西:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Run Code Online (Sandbox Code Playgroud)
适用于节省日期的时间:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Run Code Online (Sandbox Code Playgroud)
适用于新的一年:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Run Code Online (Sandbox Code Playgroud)
它可以参数化:
function DateAdd(source, amount, step) {
var factor = 1;
if (step == "day") factor = 24 * 60 * 60 * 1000;
else if (step == "hour") factor = 60 * 60 * 1000;
...
new Date(source.getTime() + amount * factor);
}
Run Code Online (Sandbox Code Playgroud)
我想我也会给出一个答案:就
个人而言,我喜欢尝试避免无偿的变量声明,方法调用和构造函数调用,因为它们的性能都很昂贵.(当然,在合理的范围内)
我会在@AnthonyWJones给出的答案下留下这个评论,但是想得更好.
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setTime( 864E5 * days + this.valueOf() ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
Run Code Online (Sandbox Code Playgroud)
以上将尊重夏令时.这意味着如果您添加跨越DST的天数,则显示的时间(小时)将更改以反映该情况.
示例:
2014年11月2日02:00是夏令时结束.
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 09:30:00
Run Code Online (Sandbox Code Playgroud)
如果您希望保留DST的时间(所以10:30仍然是10:30)...
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setDate( this.getDate() + days ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
Run Code Online (Sandbox Code Playgroud)
那么,现在你有......
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 10:30:00
Run Code Online (Sandbox Code Playgroud)
不,javascript没有内置函数,但你可以使用一行简单的代码
timeObject.setDate(timeObject.getDate() + countOfDays);
Run Code Online (Sandbox Code Playgroud)
没有变量的通用原型,它适用于现有的Date值:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
代替setTime()(或setHours())你可以这样做:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Run Code Online (Sandbox Code Playgroud)
老的:
而不是使用setTime()您可以使用setHours():
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
Run Code Online (Sandbox Code Playgroud)
见JSFiddle ...
在java脚本中添加日期的非常简单的代码。
var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);Run Code Online (Sandbox Code Playgroud)
有一个setDate和一个getDate方法,它允许你做这样的事情:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
Run Code Online (Sandbox Code Playgroud)
如果您想要减去天数并以人类可读的格式格式化您的日期,您应该考虑创建一个DateHelper看起来像这样的自定义对象:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
Run Code Online (Sandbox Code Playgroud)
(另见这个小提琴)
在 javascript 中扩展原型可能不是一个好主意,尤其是在专业代码库中。
您想要做的是扩展本机Date类:
class MyCustomDate extends Date {
addDays(days) {
const date = new MyCustomDate(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
}
const today = new MyCustomDate();
const nextWeek = today.addDays(7)
console.log(nextWeek)Run Code Online (Sandbox Code Playgroud)
这样,如果有一天 Javascript 实现了一个本地addDays方法,你就不会破坏任何东西。