Tambahkan hari untuk Upload JavaScript

Bagaimana untuk menambah hari untuk saat ini Date dengan menggunakan JavaScript. Apakah JavaScript memiliki built in fungsi seperti .Net's AddDay?

Anda dapat membuat satu dengan:-

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

Ini membutuhkan perawatan secara otomatis incrementing bulan jika diperlukan. Misalnya:

8/31 + 1 hari akan menjadi 9/1.

Masalah dengan menggunakan setDate langsung adalah bahwa hal itu's mutator dan hal-hal semacam itu sebaiknya dihindari. ECMA melihat cocok untuk mengobati Tanggal sebagai mutable kelas daripada berubah struktur.

Komentar (16)

Jawaban Yang Benar:

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

Jawaban Yang Salah:

Ini jawaban kadang-kadang memberikan hasil yang benar tapi sangat sering kembali salah tahun dan bulan. Satu-satunya waktu jawaban ini bekerja adalah bila tanggal yang anda menambahkan hari untuk terjadi untuk tahun berjalan dan bulan.

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

Bukti / Contoh

[Periksa ini JsFiddle][1]

// 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>
Komentar (18)
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

Hati-hati, karena hal ini bisa rumit. Ketika menetapkan "besok", hanya bekerja karena itu's nilai saat ini sesuai dengan tahun dan bulan untuk "hari ini". Namun, pengaturan untuk tanggal jumlah seperti "32" biasanya masih akan bekerja dengan baik untuk memindahkannya ke bulan berikutnya.

Komentar (7)

Saya solusi sederhana adalah:

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

solusi ini tidak memiliki masalah dengan daylight saving time. Juga, seseorang dapat menambahkan/sub diimbangi selama bertahun-tahun, bulan, hari, dll.

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

adalah kode yang benar.

Komentar (7)

Jawaban ini tampak membingungkan untuk saya, saya lebih suka:

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

getTime() memberi kita milidetik sejak tahun 1970, dan 86400000 adalah jumlah milidetik dalam satu hari. Oleh karena itu, ms berisi milidetik untuk tanggal yang diinginkan.

Menggunakan milidetik konstruktor memberikan tanggal yang diinginkan objek.

Komentar (4)

Mencoba

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

Menggunakan setDate() untuk menambahkan sebuah upload tidak memecahkan masalah anda, coba tambahkan beberapa hari sampai satu bulan Feb, jika anda mencoba untuk menambahkan baru hari ini, itu tidak akan mengakibatkan apa yang anda harapkan.

Komentar (5)

Hanya menghabiskan usia untuk mencoba mencari tahu apa kesepakatan itu dengan tidak menambahkan ketika memimpin berikut contoh-contoh di bawah ini.

Jika anda ingin hanya cukup menambahkan n hari ke tanggal yang telah anda anda adalah yang terbaik untuk hanya pergi:

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

atau longwinded versi

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

Hari ini/besok hal-hal yang membingungkan. Dengan menetapkan tanggal ke tanggal yang baru variabel anda akan mengacaukan nilai tahun. jika anda bekerja dari aslinya tanggal yang anda tidak't.

Komentar (1)

Jika anda bisa, gunakan moment.js. JavaScript doesn't memiliki sangat baik asli tanggal/waktu metode. Berikut ini adalah contoh Saat's sintaks:

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>

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

Komentar (9)
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);
Komentar (4)

Saya membuat ekstensi ini malam terakhir: anda dapat lulus baik positif atau nilai negatif;

contoh:

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;
}
Komentar (3)

Solusi yang paling sederhana.

 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);
Komentar (2)

Tanpa menggunakan variabel kedua, anda bisa ganti 7 dengan anda berikutnya x hari:

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

Terima kasih Jason untuk jawaban anda yang bekerja seperti yang diharapkan, di sini adalah campuran dari kode anda dan berguna format AnthonyWJones :

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

Lama aku tahu, tapi kadang-kadang saya seperti ini:

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

Terlambat ke pesta, <menyerang>tetapi jika anda menggunakan jQuery maka</strike> ada's sebuah plugin yang disebut Saat ini:

http://momentjs.com/

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

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

Dan banyak lain hal-hal yang baik di sana!

Edit: jQuery referensi dihapus terima kasih untuk aikeru's komentar

Komentar (5)

Anda dapat menggunakan JavaScript, jQuery tidak ada yang diperlukan:

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;
Komentar (0)

Saya menggunakan sesuatu seperti:

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

Bekerja dengan hari hemat waktu:

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

Bekerja dengan tahun baru:

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

Hal ini dapat parametrized:

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);
}
Komentar (0)

Mozilla docs untuk setDate() don't menunjukkan bahwa itu akan menangani akhir bulan skenario. Lihat https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

setDate()

  • Menetapkan hari dari bulan (1-31) untuk tanggal yang ditentukan menurut waktu setempat.

Itu sebabnya saya menggunakan setTime() ketika saya perlu untuk menambahkan hari.

Komentar (2)

Tidak, javascript tidak memiliki built in fungsi, tapi anda dapat menggunakan baris kode sederhana

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

Saya kira saya'll memberikan jawaban seperti ini:
Secara pribadi, saya ingin mencoba untuk menghindari serampangan deklarasi variabel, metode, dan panggilan konstruktor panggilan, karena mereka semua mahal pada kinerja. (dalam alasan, tentu saja)
Aku akan meninggalkan ini hanya sebagai komentar di bawah Jawaban yang diberikan oleh @AnthonyWJones tapi berpikir lebih baik dari itu.

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

Di atas akan menghormati DST. Artinya jika anda menambahkan jumlah hari yang melintasi DST, yang ditampilkan waktu (jam) akan berubah untuk mencerminkan hal itu.
Contoh:
Nov 2, 2014 02:00 akhir 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

Jika anda'kembali mencari untuk mempertahankan waktu di seluruh DST (sehingga 10:30 masih akan 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;
};

Jadi, sekarang anda memiliki...

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
Komentar (0)