development

JavaScript Date 객체에 시간을 추가 하시겠습니까?

big-blog 2020. 3. 2. 13:11
반응형

JavaScript Date 객체에 시간을 추가 하시겠습니까?


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;
}

Datejs 라이브러리에 추가가 있습니다.

그리고 JavaScript 날짜 메소드가 있습니다. kennebec은 현명하게 getHours () 및 setHours ();


아직 정의되지 않았는지 확인하고, 그렇지 않으면 날짜 프로토 타입에서 정의하십시오.

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

이것을 처리하는 또 다른 방법은 날짜를 유닉스 타임 (에포크)으로 변환 한 다음 (밀리 초)에 해당하는 것을 추가 한 다음 다시 변환하는 것입니다. 이 방법으로 21에 4 시간을 추가하는 것과 같이 일과 월 전환을 처리 할 수 ​​있으며, 그 결과 다음 날 01:00이됩니다.


자바 스크립트에서 간단한 추가 / 빼기 시간 / 분 기능을 사용하려면 다음을 시도하십시오.

function getTime (addHour, addMin){
    addHour = (addHour?addHour:0);
    addMin = (addMin?addMin:0);
    var time = new Date(new Date().getTime());
    var AM = true;
    var ndble = 0;
    var hours, newHour, overHour, newMin, overMin;
    //change form 24 to 12 hour clock
    if(time.getHours() >= 13){
        hours = time.getHours() - 12;
        AM = (hours>=12?true:false);
    }else{
        hours = time.getHours();
        AM = (hours>=12?false:true);
    }
    //get the current minutes
    var minutes = time.getMinutes();
    // set minute
    if((minutes+addMin) >= 60 || (minutes+addMin)<0){
        overMin = (minutes+addMin)%60;
        overHour = Math.floor((minutes+addMin-Math.abs(overMin))/60);
        if(overMin<0){
            overMin = overMin+60;
            overHour = overHour-Math.floor(overMin/60);
        }
        newMin = String((overMin<10?'0':'')+overMin);
        addHour = addHour+overHour;
    }else{
        newMin = minutes+addMin;
        newMin = String((newMin<10?'0':'')+newMin);
    }
    //set hour
    if(( hours+addHour>=13 )||( hours+addHour<=0 )){
        overHour = (hours+addHour)%12;
        ndble = Math.floor(Math.abs((hours+addHour)/12));
        if(overHour<=0){
            newHour = overHour+12;
            if(overHour == 0){
                ndble++;
            }
        }else{
            if(overHour ==0 ){
                newHour = 12;
                ndble++;
            }else{
                ndble++;
                newHour = overHour;
            }
        }
        newHour = (newHour<10?'0':'')+String(newHour);
        AM = ((ndble+1)%2===0)?AM:!AM;
    }else{
        AM = (hours+addHour==12?!AM:AM);
        newHour = String((Number(hours)+addHour<10?'0':'')+(hours+addHour));
    }
    var am = (AM)?'AM':'PM';
    return new Array(newHour, newMin, am);
};

현재 시간을 얻기 위해 매개 변수없이 사용할 수 있습니다

getTime();

또는 추가 된 분 / 시간으로 시간을 얻는 매개 변수

getTime(1,30); // adds 1.5 hours to current time
getTime(2);    // adds 2 hours to current time
getTime(0,120); // same as above

부정적인 시간조차도

getTime(-1, -30); // subtracts 1.5 hours from current time

이 함수는

array([Hour], [Minute], [Meridian])

SPRBRN이 정확합니다. 월과 연도의 시작 / 끝을 설명하려면 Epoch로 변환 한 후 다시 변환해야합니다.

그렇게하는 방법은 다음과 같습니다.

var milliseconds = 0;          //amount of time from current date/time
var sec = 0;                   //(+): future
var min = 0;                   //(-): past
var hours = 2;
var days = 0;

var startDate = new Date();     //start date in local time (we'll use current time as an example)

var time = startDate.getTime(); //convert to milliseconds since epoch

//add time difference
var newTime = time + milliseconds + (1000*sec) + (1000*60*min) + (1000*60*60*hrs) + (1000*60*60*24)

var newDate = new Date(newTime);//convert back to date; in this example: 2 hours from right now


또는 한 줄로 수행하십시오 (여기서 변수 이름은 위와 동일 함).

var newDate = 
    new Date(startDate.getTime() + millisecond + 
        1000 * (sec + 60 * (min + 60 * (hours + 24 * days))));

조금 지저분하지만 작동합니다!

다음과 같은 날짜 형식이 제공됩니다 : 2019-04-03T15 : 58

  //Get the start date.
  var start = $("#start_date").val();
  //Split the date and time.
  var startarray = start.split("T");
  var date = startarray[0];
  var time = startarray[1];

  //Split the hours and minutes.
  var timearray = time.split(":");

  var hour = timearray[0];
  var minute = timearray[1];
  //Add an hour to the hour.
  hour++;
  //$("#end_date").val = start;
  $("#end_date").val(""+date+"T"+hour+":"+minute+"");

출력은 다음과 같습니다 .2019-04-03T16 : 58

참고 URL : https://stackoverflow.com/questions/1050720/adding-hours-to-javascript-date-object



반응형