วิธีเพิ่มวันเป็นปัจจุบันDate
โดยใช้ JavaScript JavaScript มีฟังก์ชันในตัวเช่น. Net AddDay
หรือไม่
วิธีเพิ่มวันเป็นปัจจุบันDate
โดยใช้ JavaScript 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
เป็นชนชั้นที่ไม่แน่นอนแทนที่จะเป็นโครงสร้างที่ไม่เปลี่ยนรูป
864E5
ด้วยเหตุผลบางอย่างที่ฉันชอบที่จะเขียน24*60*60
ในรหัสของฉัน :)
คำตอบที่ถูกต้อง :
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;
}
หลักฐาน / ตัวอย่าง
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
ระวังเพราะอาจเป็นเรื่องยาก เมื่อตั้งค่า "วันพรุ่งนี้" จะใช้งานได้เพราะค่าปัจจุบันตรงกับปีและเดือนสำหรับ "วันนี้" อย่างไรก็ตามการตั้งค่าเป็นหมายเลขวันที่เช่น "32" โดยปกติจะยังใช้งานได้ดีเพื่อย้ายไปยังเดือนถัดไป
var d = new Date(); d.setDate( d.getDate() + 1 );
?
getDate()
ส่งคืนวันที่ของปีนั้น จากนั้นเรียกsetDate
ชุดในวันที่ปีปัจจุบัน ดังนั้นจึงไม่ใช่คำตอบทั่วไปที่ดี คำตอบของ @ AnthonyWJonesทำงานได้จริงอย่างถูกต้อง
var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)
ให้ 3 มกราคม 2017 ซึ่งข้าม 2 ปี
ทางออกที่ง่ายของฉันคือ:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
วิธีนี้ไม่ได้มีปัญหากับการปรับเวลาตามฤดูกาล นอกจากนี้หนึ่งสามารถเพิ่ม / ย่อยชดเชยใด ๆ สำหรับปีเดือนวัน ฯลฯ
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
เป็นรหัสที่ถูกต้อง
setDate
เราก็มีข้อผิดพลาดเพราะเวลาออมแสงเพราะเราได้ใช้
คำตอบเหล่านี้ดูเหมือนจะทำให้ฉันสับสนฉันชอบ:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () ให้มิลลิวินาทีแก่เราตั้งแต่ปี 1970 และ 86400000 คือจำนวนมิลลิวินาทีในหนึ่งวัน ดังนั้น ms จึงมีมิลลิวินาทีสำหรับวันที่ต้องการ
การใช้ตัวสร้างมิลลิวินาทีให้วัตถุวันที่ที่ต้องการ
new Date(new Date('11/4/2012').getTime() + 86400000)
ลอง
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
ใช้ setDate () เพื่อเพิ่มวันที่จะไม่แก้ปัญหาของคุณลองเพิ่มบางวันในเดือนกุมภาพันธ์หากคุณพยายามที่จะเพิ่มวันใหม่มันจะไม่ส่งผลในสิ่งที่คุณคาดหวัง
setDate()
หรือไม่ เป็นอย่างนี้หรือไม่: stackoverflow.com/questions/5497637/…
ใช้เวลานานแค่ไหนในการพยายามหาข้อตกลงกับปีที่ไม่ได้เพิ่มเมื่อทำตามตัวอย่างนำด้านล่าง
หากคุณต้องการเพียงแค่เพิ่ม 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 JavaScript ไม่มีวิธีวัน / เวลาดั้งเดิมที่ดีมาก ต่อไปนี้เป็นตัวอย่างของไวยากรณ์ 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);
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;
}
โดยไม่ใช้ตัวแปรตัวที่สองคุณสามารถแทนที่ 7 ด้วย x วันถัดไปของคุณ:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
ถึง substract ใช้งาน30วัน (24 ชม. = 86400000 มิลลิวินาที)
new Date(+yourDate - 30 *86400000)
ทางออกที่ง่ายที่สุด
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);
ขอบคุณ Jason สำหรับคำตอบของคุณที่ได้ผลตามที่คาดหวังนี่คือการผสมผสานจากโค้ดของคุณและรูปแบบที่สะดวกของ AnthonyWJones:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
สายงานปาร์ตี้แต่ถ้าคุณใช้มีปลั๊กอินที่ยอดเยี่ยมที่เรียกว่าช่วงเวลา:jQuery
แล้ว
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
และสิ่งดีๆอื่น ๆ อีกมากมายในนั้น!
แก้ไข: การอ้างอิง jQuery ถูกลบออกขอบคุณความคิดเห็นของ aikeru
โซลูชันที่ออกแบบมาสำหรับผู้ปฏิบัติงานท่อ :
const addDays = days => date => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
การใช้งาน:
// Without the pipeline operator...
addDays(7)(new Date());
// And with the pipeline operator...
new Date() |> addDays(7);
หากคุณต้องการฟังก์ชั่นเพิ่มเติมฉันขอแนะนำให้ดูในห้องสมุดdate-fns
เก่าฉันรู้ แต่บางครั้งฉันก็ชอบสิ่งนี้:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
ฉันมีปัญหาเกี่ยวกับการประหยัดเวลากลางวันด้วยวิธีแก้ไขปัญหาที่เสนอ
โดยใช้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;
}
คุณสามารถใช้ JavaScript โดยไม่ต้องใช้ jQuery:
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);
}
mozilla docs สำหรับ setDate () ไม่ได้ระบุว่าจะจัดการกับสถานการณ์สิ้นเดือน ดูhttps://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
setDate ()
นั่นคือเหตุผลที่ฉันใช้ setTime () เมื่อฉันต้องการเพิ่มวัน
ง่ายเหมือนนี้
new Date((new Date()).getTime() + (60*60*24*1000));
ฉันเดาว่าฉันจะให้คำตอบด้วย: โดย
ส่วนตัวแล้วฉันชอบที่จะพยายามหลีกเลี่ยงการประกาศตัวแปรที่ไม่มีค่าใช้จ่ายการเรียกใช้เมธอดและการเรียก Constructor เนื่องจากค่าใช้จ่ายมีประสิทธิภาพสูง (ด้วยเหตุผลแน่นอน)
ฉันจะปล่อยให้เรื่องนี้เป็นเพียงความคิดเห็นภายใต้คำตอบที่ได้รับจาก @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 เวลาที่แสดง (ชั่วโมง) จะเปลี่ยนไปตามนั้น
ตัวอย่าง:
2 พฤศจิกายน 2014 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);
ฉันใช้สิ่งที่ชอบ:
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)
มันสามารถ 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);
}
ฉันใช้โซลูชันต่อไปนี้
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 อาร์กิวเมนต์นี้แสดงถึงมิลลิวินาทีรวมก่อน / หลัง 1 มกราคม 1970 นอกจากนี้ยังมีเมธอด setTime ซึ่งทำเช่นเดียวกันโดยไม่ต้องสร้างวัตถุ Date ใหม่
สิ่งที่เราทำที่นี่คือแปลงวันเป็นมิลลิวินาทีและเพิ่มค่านี้เป็นค่าที่ได้รับจาก getTime สุดท้ายเราให้ผลลัพธ์เป็นวันที่ (มิลลิวินาที) ตัวสร้างหรือ setTime (มิลลิวินาที) วิธี
now.setDate(now.getDate() + days);
จัดการการเปลี่ยนแปลง DST โดยอัตโนมัติ และฉันต้องแก้ไขเผ่นวินาทีจะถูกละเว้นในการประทับเวลา JS
แก้ไข:
แทนที่จะเป็น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 ...
d.setDate(d.getDate() + 1);
รหัสง่ายมากที่จะเพิ่มวันที่ในจาวาสคริปต์
var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);
มีวิธีsetDateและgetDateซึ่งให้คุณทำสิ่งนี้:
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));
(ดูซอนี้ )
การขยายต้นแบบใน javascript อาจไม่ใช่ความคิดที่ดีโดยเฉพาะอย่างยิ่งในรหัสฐานอาชีพ
สิ่งที่คุณต้องการทำคือขยายDate
ชั้นเรียนดั้งเดิม:
class MyCustomDate extends Date {
addDays(days) {
const date = new MyCustomDate(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
}
const today = new MyCustomDate();
const nextWeek = today.addDays(7)
console.log(nextWeek)
ด้วยวิธีนี้หาก Javascript หนึ่งวันใช้addDays
วิธีเนทีฟคุณจะไม่ผิดเพี้ยน
Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};