Programing

JavaScript 날짜에 요일 추가

lottogame 2020. 9. 28. 07:56
반응형

JavaScript 날짜에 요일 추가


DateJavaScript를 사용하여 현재 날짜를 추가하는 방법 . JavaScript에는 .Net과 같은 내장 기능이 AddDay있습니까?


다음을 사용하여 만들 수 있습니다.

Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

var date = new Date();

alert(date.addDays(5));

필요한 경우 자동으로 월을 증가시킵니다. 예를 들면 :

8/31 + 1 일은 9/1이 됩니다.

setDate직접 사용할 때의 문제 는 그것이 뮤 테이터이고 그런 종류의 것을 피하는 것이 가장 좋다는 것입니다. ECMA는 Date불변의 구조가 아닌 가변 클래스 로 취급 하는 것이 적합하다고 생각했습니다 .


정답 :

function addDays(date, days) {
  var result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
}

오답 :

이 답변은 때때로 올바른 결과를 제공하지만 종종 잘못된 연도와 월을 반환합니다. 이 답변이 작동하는 유일한 경우는 날짜를 추가하는 날짜에 현재 연도와 월이있을 때입니다.

// Don't do it this way!
function addDaysWRONG(date, days) {
  var result = new Date();
  result.setDate(date.getDate() + days);
  return result;
}

증명 / 예

이 JsFiddle 확인

// Correct
function addDays(date, days) {
    var result = new Date(date);
    result.setDate(result.getDate() + days);
    return result;
}

// Bad Year/Month
function addDaysWRONG(date, days) {
    var result = new Date();
    result.setDate(date.getDate() + days);
    return result;
}

// Bad during DST
function addDaysDstFail(date, days) {
    var dayms = (days * 24 * 60 * 60 * 1000);
    return new Date(date.getTime() + dayms);    
}

// TEST
function formatDate(date) {
    return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
}

$('tbody tr td:first-child').each(function () {
    var $in = $(this);
    var $out = $('<td/>').insertAfter($in).addClass("answer");
    var $outFail = $('<td/>').insertAfter($out);
    var $outDstFail = $('<td/>').insertAfter($outFail);
    var date = new Date($in.text());
    var correctDate = formatDate(addDays(date, 1));
    var failDate = formatDate(addDaysWRONG(date, 1));
    var failDstDate = formatDate(addDaysDstFail(date, 1));

    $out.text(correctDate);
    $outFail.text(failDate);
    $outDstFail.text(failDstDate);
    $outFail.addClass(correctDate == failDate ? "right" : "wrong");
    $outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong");
});
body {
    font-size: 14px;
}

table {
    border-collapse:collapse;
}
table, td, th {
    border:1px solid black;
}
td {
    padding: 2px;
}

.wrong {
    color: red;
}
.right {
    color: green;
}
.answer {
    font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
    <tbody>
        <tr>
            <th colspan="4">DST Dates</th>
        </tr>
        <tr>
            <th>Input</th>
            <th>+1 Day</th>
            <th>+1 Day Fail</th>
            <th>+1 Day DST Fail</th>
        </tr>
        <tr><td>03/10/2013</td></tr>
        <tr><td>11/03/2013</td></tr>
        <tr><td>03/09/2014</td></tr>
        <tr><td>11/02/2014</td></tr>
        <tr><td>03/08/2015</td></tr>
        <tr><td>11/01/2015</td></tr>
        <tr>
            <th colspan="4">2013</th>
        </tr>
        <tr>
            <th>Input</th>
            <th>+1 Day</th>
            <th>+1 Day Fail</th>
            <th>+1 Day DST Fail</th>
        </tr>
        <tr><td>01/01/2013</td></tr>
        <tr><td>02/01/2013</td></tr>
        <tr><td>03/01/2013</td></tr>
        <tr><td>04/01/2013</td></tr>
        <tr><td>05/01/2013</td></tr>
        <tr><td>06/01/2013</td></tr>
        <tr><td>07/01/2013</td></tr>
        <tr><td>08/01/2013</td></tr>
        <tr><td>09/01/2013</td></tr>
        <tr><td>10/01/2013</td></tr>
        <tr><td>11/01/2013</td></tr>
        <tr><td>12/01/2013</td></tr>
        <tr>
            <th colspan="4">2014</th>
        </tr>
        <tr>
            <th>Input</th>
            <th>+1 Day</th>
            <th>+1 Day Fail</th>
            <th>+1 Day DST Fail</th>
        </tr>
        <tr><td>01/01/2014</td></tr>
        <tr><td>02/01/2014</td></tr>
        <tr><td>03/01/2014</td></tr>
        <tr><td>04/01/2014</td></tr>
        <tr><td>05/01/2014</td></tr>
        <tr><td>06/01/2014</td></tr>
        <tr><td>07/01/2014</td></tr>
        <tr><td>08/01/2014</td></tr>
        <tr><td>09/01/2014</td></tr>
        <tr><td>10/01/2014</td></tr>
        <tr><td>11/01/2014</td></tr>
        <tr><td>12/01/2014</td></tr>
        <tr>
            <th colspan="4">2015</th>
        </tr>
        <tr>
            <th>Input</th>
            <th>+1 Day</th>
            <th>+1 Day Fail</th>
            <th>+1 Day DST Fail</th>
        </tr>
        <tr><td>01/01/2015</td></tr>
        <tr><td>02/01/2015</td></tr>
        <tr><td>03/01/2015</td></tr>
        <tr><td>04/01/2015</td></tr>
        <tr><td>05/01/2015</td></tr>
        <tr><td>06/01/2015</td></tr>
        <tr><td>07/01/2015</td></tr>
        <tr><td>08/01/2015</td></tr>
        <tr><td>09/01/2015</td></tr>
        <tr><td>10/01/2015</td></tr>
        <tr><td>11/01/2015</td></tr>
        <tr><td>12/01/2015</td></tr>
    </tbody>
</table>


var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

이것은 까다로울 수 있으므로 조심하십시오. "tomorrow"를 설정하면 현재 값이 "today"의 연도 및 월과 일치하기 때문에 작동합니다. 그러나 "32"와 같은 날짜 번호로 설정하면 일반적으로 다음 달로 이동하는 데 문제가 없습니다.


내 간단한 해결책은 다음과 같습니다.

nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);

이 솔루션은 일광 절약 시간제에 문제가 없습니다. 또한 년, 월, 일 등에 대한 오프셋을 추가 / 구독 할 수 있습니다.

day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);

올바른 코드입니다.


이 답변은 나에게 혼란스러워 보입니다.

var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);

getTime ()은 1970 년 이후의 밀리 초를 제공하고 86400000은 하루의 밀리 초 수입니다. 따라서 ms에는 원하는 날짜에 대한 밀리 초가 포함됩니다.

밀리 초 생성자를 사용하면 원하는 날짜 개체가 제공됩니다.


시험

var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));

setDate ()를 사용하여 날짜를 추가하면 문제가 해결되지 않습니다. 2 월에 며칠을 추가해보십시오. 새 날짜를 추가하려고하면 예상 한 결과가 나오지 않습니다.


아래의 주요 예를 따를 때 추가하지 않은 연도의 거래가 무엇인지 파악하려고 몇 년을 보냈습니다.

가지고있는 날짜에 n 일만 더하고 싶다면 다음을 수행하는 것이 가장 좋습니다.

myDate.setDate (myDate.getDate () + n);

또는 장황한 버전

var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);

오늘 / 내일은 혼란 스럽습니다. 현재 날짜를 새 날짜 변수로 설정하면 연도 값이 엉망이됩니다. 원래 날짜부터 일하면 안됩니다.


가능하다면 moment.js를 사용 하세요 . 자바 스크립트에는 좋은 기본 날짜 / 시간 방법이 없습니다. 다음은 Moment 구문의 예입니다.

var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>

참조 : http://momentjs.com/docs/#/manipulating/add/


int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

CodePen

var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);


어제 밤에 이러한 확장을 만들었습니다.
양수 또는 음수 값을 전달할 수 있습니다.

예:

var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);


Date.prototype.addDays = function (num) {
    var value = this.valueOf();
    value += 86400000 * num;
    return new Date(value);
}

Date.prototype.addSeconds = function (num) {
    var value = this.valueOf();
    value += 1000 * num;
    return new Date(value);
}

Date.prototype.addMinutes = function (num) {
    var value = this.valueOf();
    value += 60000 * num;
    return new Date(value);
}

Date.prototype.addHours = function (num) {
    var value = this.valueOf();
    value += 3600000 * num;
    return new Date(value);
}

Date.prototype.addMonths = function (num) {
    var value = new Date(this.valueOf());

    var mo = this.getMonth();
    var yr = this.getYear();

    mo = (mo + num) % 12;
    if (0 > mo) {
        yr += (this.getMonth() + num - mo - 12) / 12;
        mo += 12;
    }
    else
        yr += ((this.getMonth() + num - mo) / 12);

    value.setMonth(mo);
    value.setYear(yr);
    return value;
}

가장 간단한 해결책.

 Date.prototype.addDays = function(days) {
   this.setDate(this.getDate() + parseInt(days));
   return this;
 };

 // and then call

 var newDate = new Date().addDays(2); //+2 days
 console.log(newDate);

 // or

 var newDate1 = new Date().addDays(-2); //-2 days
 console.log(newDate1);


두 번째 변수를 사용하지 않고 7을 다음 x 일로 바꿀 수 있습니다.

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));

예상대로 작동하는 답변에 대해 Jason에게 감사드립니다. 여기에 코드와 AnthonyWJones의 편리한 형식이 혼합되어 있습니다.

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}

늦게 파티에, 당신이 사용하는 경우 그러나 jQuery다음 순간이라는 훌륭한 플러그인이있다 :

http://momentjs.com/

var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();

http://momentjs.com/docs/#/manipulating/

그리고 거기에 다른 많은 좋은 것들이 있습니다!

편집 : aikeru의 의견 덕분에 jQuery 참조가 제거되었습니다.


예전은 알고 있지만 때때로 나는 이것을 좋아합니다.

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}

setDate ()에 대한 mozilla 문서는 월말 시나리오를 처리 할 것임을 나타내지 않습니다. 참조 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date를

setDate ()

  • 현지 시간에 따라 지정된 날짜의 일 (1-31)을 설정합니다.

그래서 날짜를 추가해야 할 때 setTime ()을 사용합니다.


다음과 같이 사용합니다.

new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)

일광 절약 시간과 함께 작동 :

new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

새해와 함께 작동 :

new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

매개 변수화 할 수 있습니다.

function DateAdd(source, amount, step) {
  var factor = 1;
  if (step == "day") factor = 24 * 60 * 60 * 1000;
  else if (step == "hour") factor = 60 * 60 * 1000;
  ...
  new Date(source.getTime() + amount * factor);
}

나는 또한 대답을 줄 것이라고 생각한다.
개인적으로, 나는 성능면에서 비용이 많이 들기 때문에 불필요한 변수 선언, 메서드 호출, 생성자 호출을 피하려고한다. (물론 이유 내에서)
@AnthonyWJones가 제공 한 답변 아래에 주석으로 남겨 두려고했지만 더 잘 생각했습니다.

// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
    return this.setTime( 864E5 * days + this.valueOf() ) && this;
};

// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
    return date.setTime( 864E5 * days + date.valueOf() ) && date;
};

// Basic Function declaration...
function addDaysToDate( date, days ) {
    return date.setTime( 864E5 * days + date.valueOf() ) && date;
};

위는 DST를 존중합니다. 즉, DST를 교차하는 일 수를 추가하면 표시되는 시간 (시간)이이를 반영하여 변경됩니다.
예 :
2014 년 11 월 2 일 02:00은 DST가 끝났습니다.

var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt );                  // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 09:30:00

DST 기간 동안 시간을 ​​유지하려는 경우 (10:30은 여전히 ​​10:30이됩니다) ...

// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
    return this.setDate( this.getDate() + days ) && this;
};

// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
    return date.setDate( date.getDate() + days ) && date;
};

// Basic Function declaration...
function addDaysToDate( date, days ) {
    return date.setDate( date.getDate() + days ) && date;
};

자, 이제 ...

var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt );                  // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 10:30:00

아니요, 자바 스크립트에는 기본 제공 기능이 없지만 간단한 코드 줄을 사용할 수 있습니다.

timeObject.setDate(timeObject.getDate() + countOfDays);

제안 된 솔루션에 일광 절약 시간에 문제가있었습니다.

대신 getUTCDate/ 를 사용하여 setUTCDate문제를 해결했습니다.

// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
  // Make a working copy so we don't mutate the supplied date.
  const d = new Date(date);

  d.setUTCDate(d.getUTCDate() + num);

  return d;
}

jQuery가 필요하지 않은 JavaScript를 사용할 수 있습니다.

var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd); 
Formatting to dd/mm/yyyy :

var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();

var someFormattedDate = dd + '/'+ mm + '/'+ y;

변수가없는 일반 프로토 타입, 기존 날짜 값에 적용됩니다.

Date.prototype.addDays = function (days) {
    return new Date(this.valueOf() + days * 864e5);
}

다음 솔루션을 사용하고 있습니다.

var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);

Date에는 int를 허용하는 생성자가 있습니다. 이 인수는 1970 년 1 월 1 일 전후의 총 밀리 초를 나타냅니다. 또한 새 Date 객체를 만들지 않고 동일한 작업을 수행하는 setTime 메서드가 있습니다.

여기서 우리가하는 일은 일을 밀리 초로 변환하고이 값을 getTime에서 제공하는 값에 추가하는 것입니다. 마지막으로 결과를 Date (milliseconds) 생성자 또는 setTime (milliseconds) 메서드에 제공합니다.


편집 :setTime() (또는 setHours()) 대신 다음과 같이 할 수 있습니다.

Date.prototype.addDays= function(d){
  this.setDate(this.getDate() + d);
  return this;
};

var tomorrow = new Date().addDays(1);

낡은:

사용하는 대신 setTime()다음을 사용할 수 있습니다 setHours().

Date.prototype.addDays= function(d){
    this.setHours(this.getHours() + d * 24);
    return this;
};

var tomorrow = new Date().addDays(1);

JSFiddle 참조 ...


자바 스크립트에서 날짜를 추가하는 매우 간단한 코드.

var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);


30 일 사용 을 뺀다 (24h = 86400000ms)

new Date(+yourDate - 30 *86400000)

var yourDate=new Date();
var d = new Date(+yourDate - 30 *86400000) 

console.log(d)


우리 팀은 date-fns 가이 공간에서 최고의 라이브러리 라고 생각 합니다 . 날짜를 불변으로 취급하고 ( Moment.js는 아마도 불변성을 채택하지 않을 것입니다 ), 더 빠르며 모듈 식으로로드 할 수 있습니다.

const newDate = DateFns.addDays(oldDate, 2);

다음 과 같은 작업을 수행 할 수 있는 setDategetDate 메소드가 있습니다.

var newDate = aDate.setDate(aDate.getDate() + numberOfDays);

날짜 수를 빼고 사람이 읽을 수있는 형식으로 날짜 형식을 지정하려면 DateHelper다음과 같은 사용자 지정 개체를 만드는 것이 좋습니다 .

var DateHelper = {
    addDays : function(aDate, numberOfDays) {
        aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
        return aDate;                                  // Return the date
    },
    format : function format(date) {
        return [
           ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
           ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
           date.getFullYear()                          // Get full year
        ].join('/');                                   // Glue the pieces together
    }
}

// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));

( 이 Fiddle 참조 )


    //the_day is 2013-12-31
    var the_day = Date.UTC(2013, 11, 31); 
    // Now, the_day will be "1388448000000" in UTC+8; 
    var the_next_day = new Date(the_day + 24 * 60 * 60 * 1000);
    // Now, the_next_day will be "Wed Jan 01 2014 08:00:00 GMT+0800"

Angular를 사용하는 경우 :

그냥 해:

$scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);
$scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);

참고 URL : https://stackoverflow.com/questions/563406/add-days-to-javascript-date

반응형