jon*_*bbs 548 javascript datetime date
有没有人知道一个简单的约会方式(例如今天)和回去X天?
因此,例如,如果我想在今天前5天计算日期.
Ste*_*ton 856
尝试这样的事情:
var d = new Date();
d.setDate(d.getDate()-5);
Run Code Online (Sandbox Code Playgroud)
请注意,这会修改日期对象并返回更新日期的时间值.
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 5);
document.write('<br>5 days ago was: ' + d.toLocaleString());
Run Code Online (Sandbox Code Playgroud)
kar*_*m79 71
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Run Code Online (Sandbox Code Playgroud)
如果您在整个Web应用程序中执行大量日常操作,DateJS将使您的生活更轻松:
http://simonwillison.net/2007/Dec/3/datejs/
Bon*_*ict 49
如果您希望将所有内容都放在一行上。
从今天起5天
//past
var fiveDaysAgo = new Date(new Date().setDate(new Date().getDate() - 5));
//future
var fiveDaysInTheFuture = new Date(new Date().setDate(new Date().getDate() + 5));
Run Code Online (Sandbox Code Playgroud)
自特定日期起 5 天
var pastDate = new Date('2019-12-12T00:00:00');
//past
var fiveDaysAgo = new Date(new Date().setDate(pastDate.getDate() - 5));
//future
var fiveDaysInTheFuture = new Date(new Date().setDate(pastDate.getDate() + 5));
Run Code Online (Sandbox Code Playgroud)
我写了一个你可以使用的函数。
//past
var fiveDaysAgo = new Date(new Date().setDate(new Date().getDate() - 5));
//future
var fiveDaysInTheFuture = new Date(new Date().setDate(new Date().getDate() + 5));
Run Code Online (Sandbox Code Playgroud)
Chr*_*sen 48
它是这样的:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
Run Code Online (Sandbox Code Playgroud)
awj*_*wjr 22
我注意到getDays + X在日/月边界上不起作用.只要您的日期不是1970年之前,就可以使用getTime.
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
Run Code Online (Sandbox Code Playgroud)
Ken*_*max 17
得到moment.js.所有酷孩子都使用它.它有更多的格式选项,等等
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
Run Code Online (Sandbox Code Playgroud)
可选的!转换为JS Date obj for Angular binding.
var date = new Date(dateMnsFive.toISOString());
Run Code Online (Sandbox Code Playgroud)
可选的!格式
var date = dateMnsFive.format("YYYY-MM-DD");
Run Code Online (Sandbox Code Playgroud)
Rob*_*ley 12
我为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;
};
}
Run Code Online (Sandbox Code Playgroud)
所以,要使用它,我可以简单地写:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
Run Code Online (Sandbox Code Playgroud)
pos*_*est 11
我喜欢在几毫秒内完成数学运算.所以使用Date.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
Run Code Online (Sandbox Code Playgroud)
如果你喜欢它格式化
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
Run Code Online (Sandbox Code Playgroud)
注意:Date.now()
在旧版浏览器中不起作用(例如IE8).Polyfill在这里.
@socketpair指出我的邋.. 正如他/她所说的那样"一年中的某些日子有23个小时,而根据时区规则,大约有25个小时".
为了扩展这一点,如果你想在5天前计算一个时区的日期变化,那么上面的答案会有一些日常的不准确之处
Date.now()
给你当前的LOCAL现在时间,或.toString()
返回本地日期,因此与Date.now()
UTC中的基准日期不兼容. 但是,如果您使用UTC进行数学计算,则可以正常工作,例如
A.你想要从5天前开始的UTC日期(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
Run Code Online (Sandbox Code Playgroud)
B.您使用"现在"以外的UTC基准日期开始 Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
Run Code Online (Sandbox Code Playgroud)
Joe*_*ore 11
一些现有的解决方案很接近,但并不完全是我想要的.此函数适用于正值或负值,并处理边界情况.
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
Run Code Online (Sandbox Code Playgroud)
Jos*_*hua 10
将您的日期拆分为多个部分,然后返回带有调整值的新日期
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);
}
Run Code Online (Sandbox Code Playgroud)
请记住,月份是零,但日子不是.即新日期(2009年,1,1)== 2009年2月1日,新日期(2009年,1,0)== 2009年1月31日;
我发现getDate()/ setDate()方法的一个问题是它很容易将所有内容都转换为毫秒,而且语法有时很难让我遵循.
相反,我喜欢解决1天= 86,400,000毫秒的事实.
所以,对于你的特定问题:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Run Code Online (Sandbox Code Playgroud)
奇迹般有效.
我一直使用这种方法进行30/60/365天的滚动计算.
您可以轻松地推断这个以创建数月,数年等的时间单位.
小智 9
有些人建议使用 moment.js 来让你在 js 中处理日期时更轻松。这些答案已经过去了,值得注意的是,moment.js 的作者现在不鼓励使用它。主要是由于它的大小和缺乏摇树支撑。
如果您想走图书馆路线,请使用像Luxon这样的替代方案。它明显更小(因为它巧妙地使用了Intl 对象并支持 tree-shaking)并且与 moment.js 一样通用。
要返回 5 天后的 Luxon,您可以执行以下操作:
import { DateTime } from 'luxon'
DateTime.now().minus({ days: 5 });
Run Code Online (Sandbox Code Playgroud)
小智 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);
Run Code Online (Sandbox Code Playgroud)
小智 5
无需使用第二个变量,您可以将x替换为x天:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
530670 次 |
最近记录: |