[javascript] JavaScript의 날짜에서 일, 월, 년 빼기
데이트를하고 (예 : 오늘) X 일, X 개월, X 년으로 돌아가는 간단한 방법을 아는 사람이 있습니까?
나는 그것을 시도했다 :
var date = new Date();
$("#searchDateFrom").val((date.getMonth() -1 ) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1));
그러나 나는 부정적인 날짜를 얻었습니다. 예를 들어 오늘 출력은 다음과 같습니다.
2015 년 3 월 3 일
조언이 있습니까?
감사.
답변
단순히 숫자에서 값을 줄이는 것입니다. 따라서 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()));
답변
다른 사람들이와 같은 메서드에서 반환 된 숫자 값에서 빼고 있다고 말했듯이 date.getDate()
날짜 변수에서 해당 값을 재설정해야합니다. 이 작업을 수행 할 방법을 아래에 만들었습니다. new Date()
현재 날짜로 초기화되는 날짜를 생성하고 전달 된 값에 따라 날짜, 월, 연도를 설정합니다. 예를 들어 6 일 뒤로 돌아가려면 -6과 같이 전달 var newdate = createDate(-6,0,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;
}
답변
MomentJS 라이브러리를 사용하는 것이 좋습니다. Dates와의 모든 상호 작용을 훨씬 간단하게 만듭니다.
Moment를 사용하는 경우 코드는 다음과 같이 간단합니다.
var today = moment();
var nextMonth = today.add('month', 1);
// note that both variables `today` and `nextMonth` refer to
// the next month at this point, because `add` mutates in-place
MomentJS는 여기에서 찾을 수 있습니다 : http://momentjs.com/
최신 정보:
JavaScript에서 Date.getDate () 함수는 1-31에서 현재 날짜를 반환합니다. 이 숫자에서 6을 빼고 있으며 현재 해당 월의 3 일입니다. 이것은 값을 -3으로 가져옵니다.
답변
이것은 Phil의 대답을 기반으로 전달 된 시작 날짜를 취하는 순수 함수입니다.
function deltaDate(input, days, months, years) {
return new Date(
input.getFullYear() + years,
input.getMonth() + months,
Math.min(
input.getDate() + days,
new Date(input.getFullYear() + years, input.getMonth() + months + 1, 0).getDate()
)
);
}
예 : 한 달 전 날짜를 콘솔 로그에 기록합니다.
console.log(deltaDate(new Date(), 0, -1, 0));
예 : 2020 년 3 월 30 일에서 한 달을 뺍니다.
console.log(deltaDate(new Date(2020, 2, 30), 0, -1, 0)); // Feb 29, 2020
월말이나 연도 말을 지나도 작동합니다.
업데이트 : 위의 예에서 볼 수 있듯이 한 달의 일수 차이를 처리하도록 업데이트되었습니다.
답변
momentjs 메서드 subtract 와 유사한 기능을 구현했습니다 .
-Javascript를 사용하는 경우
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;
}
}
예:
let dt = new Date();
dt = addDate(dt, -1, 'months');// use -1 to subtract
-Typescript를 사용하는 경우 :
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;
}
}
예:
let dt = new Date();
dt = addDate(dt, -1, 'months'); // use -1 to subtract
선택 사항 (단위 테스트)
또한 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);
}
});
이 테스트를 사용하려면 다음 기능이 필요합니다.
// 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('-');
}
답변
시간 및 날짜 관리를 위해 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
답변
이것은 질문에 완전히 대답하지 않지만 초기 날짜를 상쇄하려는 일 수를 계산할 수있는 사람에게는 다음 방법이 작동합니다.
myDate.setUTCDate(myDate.getUTCDate() + offsetDays);
offsetDays는 양수 또는 음수 일 수 있으며 주어진 오프셋이있는 지정된 초기 날짜에 대해 결과가 정확합니다.