有没有人知道一个简单的约会方式(例如今天)和回去X天,X个月和X年?
我试过了:
var date = new Date();
$("#searchDateFrom").val((date.getMonth() -1 ) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1));
Run Code Online (Sandbox Code Playgroud)
但我得到了一个负面日期,例如今天的输出是:
3/3/2015
有什么建议吗?
谢谢.
gur*_*372 74
您只是从数字中减少值.因此从3(日期)减去6将仅返回-3.
您需要在日期对象中单独添加/删除时间单位
var date = new Date();
date.setDate( date.getDate() - 6 );
date.setFullYear( date.getFullYear() - 1 );
$("#searchDateFrom").val((date.getMonth() ) + '/' + (date.getDate()) + '/' + (date.getFullYear()));
Run Code Online (Sandbox Code Playgroud)
Phi*_*hil 19
正如其他人所说,你要从类似方法返回的数值中减去date.getDate(),你需要在日期变量上重置这些值.我在下面创建了一个方法,可以帮到你.它创建一个日期,使用new Date()该日期初始化当前日期,然后根据传入的值设置日期,月份和年份.例如,如果您想要返回6天,则传递-6,如此var newdate = createDate(-6,0,0).如果您不想将值传递设置为零(或者您可以设置默认值).该方法将为您返回新日期(在Chrome和Firefox中测试).
function createDate(days, months, years) {
var date = new Date();
date.setDate(date.getDate() + days);
date.setMonth(date.getMonth() + months);
date.setFullYear(date.getFullYear() + years);
return date;
}
Run Code Online (Sandbox Code Playgroud)
FvB*_*FvB 14
我建议使用MomentJS库.他们使与日期的所有互动变得更加简单.
如果您使用Moment,您的代码将如此简单:
var today = moment();
var nextMonth = today.add('month', 1);
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到MomentJS:http://momentjs.com/
更新:
在JavaScript中,Date.getDate()函数从1-31返回当月的当前日期.你从这个数字减去6,它目前是这个月的第3个.这使得值为-3.
我实现了一个类似于momentjs方法减法的函数。
function addDate(dt, amount, dateType) {
switch (dateType) {
case 'days':
return dt.setDate(dt.getDate() + amount) && dt;
case 'weeks':
return dt.setDate(dt.getDate() + (7 * amount)) && dt;
case 'months':
return dt.setMonth(dt.getMonth() + amount) && dt;
case 'years':
return dt.setFullYear( dt.getFullYear() + amount) && dt;
}
}
Run Code Online (Sandbox Code Playgroud)
例子:
let dt = new Date();
dt = addDate(dt, -1, 'months');// use -1 to subtract
Run Code Online (Sandbox Code Playgroud)
export enum dateAmountType {
DAYS,
WEEKS,
MONTHS,
YEARS,
}
export function addDate(dt: Date, amount: number, dateType: dateAmountType): Date {
switch (dateType) {
case dateAmountType.DAYS:
return dt.setDate(dt.getDate() + amount) && dt;
case dateAmountType.WEEKS:
return dt.setDate(dt.getDate() + (7 * amount)) && dt;
case dateAmountType.MONTHS:
return dt.setMonth(dt.getMonth() + amount) && dt;
case dateAmountType.YEARS:
return dt.setFullYear( dt.getFullYear() + amount) && dt;
}
}
Run Code Online (Sandbox Code Playgroud)
例子:
let dt = new Date();
dt = addDate(dt, -1, 'months'); // use -1 to subtract
Run Code Online (Sandbox Code Playgroud)
我还使用Jasmine为这个函数做了一些单元测试:
it('addDate() should works properly', () => {
for (const test of [
{ amount: 1, dateType: dateAmountType.DAYS, expect: '2020-04-13'},
{ amount: -1, dateType: dateAmountType.DAYS, expect: '2020-04-11'},
{ amount: 1, dateType: dateAmountType.WEEKS, expect: '2020-04-19'},
{ amount: -1, dateType: dateAmountType.WEEKS, expect: '2020-04-05'},
{ amount: 1, dateType: dateAmountType.MONTHS, expect: '2020-05-12'},
{ amount: -1, dateType: dateAmountType.MONTHS, expect: '2020-03-12'},
{ amount: 1, dateType: dateAmountType.YEARS, expect: '2021-04-12'},
{ amount: -1, dateType: dateAmountType.YEARS, expect: '2019-04-12'},
]) {
expect(formatDate(addDate(new Date('2020-04-12'), test.amount, test.dateType))).toBe(test.expect);
}
});
Run Code Online (Sandbox Code Playgroud)
要使用此测试,您需要此功能:
// get format date as 'YYYY-MM-DD'
export function formatDate(date: Date): string {
const d = new Date(date);
let month = '' + (d.getMonth() + 1);
let day = '' + d.getDate();
const year = d.getFullYear();
if (month.length < 2) {
month = '0' + month;
}
if (day.length < 2) {
day = '0' + day;
}
return [year, month, day].join('-');
}
Run Code Online (Sandbox Code Playgroud)
这是一个纯函数,需要一个传递的开始日期,以Phil的答案为基础:
function deltaDate(input, days, months, years) {
var date = new Date(input);
date.setDate(date.getDate() + days);
date.setMonth(date.getMonth() + months);
date.setFullYear(date.getFullYear() + years);
return date;
}
Run Code Online (Sandbox Code Playgroud)
例如,将一个月前的日期写入控制台日志:
console.log(deltaDate(new Date(), 0, -1, 0));
Run Code Online (Sandbox Code Playgroud)
请注意,即使您在月底或年份结束时也可以使用。
小智 5
使用moment.js库进行时间和日期管理。
import moment = require('moment');
const now = moment();
now.subtract(7, 'seconds'); // 7 seconds ago
now.subtract(7, 'days'); // 7 days and 7 seconds ago
now.subtract(7, 'months'); // 7 months, 7 days and 7 seconds ago
now.subtract(7, 'years'); // 7 years, 7 months, 7 days and 7 seconds ago
// because `now` has been mutated, it no longer represents the current time
Run Code Online (Sandbox Code Playgroud)