카테고리 보관물: Javascript

Javascript

JavaScript Date 객체에 시간을 추가 하시겠습니까? now.addHours(4); function Date.prototype.addHours(h)

JavaScript의 Date 객체가 어떤 종류의 추가 기능도 구현하지 않는다는 것이 놀랍습니다.

나는 단순히 이것을 할 수있는 기능을 원한다.

var now = Date.now();
var fourHoursLater = now.addHours(4);

function Date.prototype.addHours(h) {

   // how do I implement this?  

}

나는 한 방향으로 약간의 포인터를 원합니다.

  • 문자열 구문 분석을 수행해야합니까?

  • setTime을 사용할 수 있습니까?

  • 밀리 초는 어떻습니까?

이처럼 :

new Date(milliseconds + 4*3600*1000 /*4 hrs in ms*/)?  

이것은 실제로 해킹처럼 보이지만 작동합니까?



답변

JavaScript 자체에는 끔찍한 날짜 / 시간 API가 있습니다. 그럼에도 불구하고 순수한 JavaScript 로이 작업을 수행 할 수 있습니다.

Date.prototype.addHours = function(h) {
  this.setTime(this.getTime() + (h*60*60*1000));
  return this;
}


답변

Date.prototype.addHours= function(h){
    this.setHours(this.getHours()+h);
    return this;
}

테스트:

alert(new Date().addHours(4));


답변

아래 코드는 날짜에 4 시간을 추가하는 것입니다 (예 : 오늘 날짜)

var today = new Date();
today.setHours(today.getHours() + 4);

4에서 23을 추가하려고하면 오류가 발생하지 않습니다 ( 문서 참조 ).

지정한 매개 변수가 예상 범위를 벗어나면 setHours ()는 Date 객체의 날짜 정보를 그에 따라 업데이트하려고 시도합니다.


답변

매개 변수를 변경하지 않고 Date 객체의 복사본을 반환하여 addHours 메서드를 변경 불가능하게 만드는 것이 좋습니다.

Date.prototype.addHours= function(h){
    var copiedDate = new Date(this.getTime());
    copiedDate.setHours(copiedDate.getHours()+h);
    return copiedDate;
}

이렇게하면 상태에 대해 걱정하지 않고 많은 메소드 호출을 연결할 수 있습니다.


답변

kennebec이 제안한 버전은 DST로 또는 그로부터 변경 될 때 실패합니다. 설정 한 시간 번호이기 때문입니다.

this.setUTCHours(this.getUTCHours()+h);

시간 시스템 특성 hthis무관하게 시간을 추가 합니다. Jason Harwig의 방법도 효과적입니다.


답변

momentjs http://momentjs.com/ Library를 사용할 수 있습니다 .

var moment = require('moment');
foo = new moment(something).add(10, 'm').toDate();


답변

또한 원본 객체를 수정해서는 안된다고 생각합니다. 따라서 미래의 인력을 절약하기 위해 Jason HarwigTahir Hasan의 답변을 기반으로 한 통합 솔루션이 있습니다 .

Date.prototype.addHours= function(h){
    var copiedDate = new Date();
    copiedDate.setTime(this.getTime() + (h*60*60*1000));
    return copiedDate;
}