วันที่ปัจจุบันแปลงเป็น 10 วันก่อนและ 10 วันหลังจากนั้น
ฉันมีรหัสนี้ที่ฉันแปลงวันที่ปัจจุบันเป็นรูปแบบ2020-08-20
นี้ แต่จะแก้ไขยังไงให้วันที่ 10 วันfrom
นี้กับ 10 วันbefore
นี้
เช่นวันนี้คือ2020-08-20
ฉันพยายามจะได้ 10 วันนับจากวันนี้2020-08-30
นี่คือรหัสของฉัน
const dateConverter = (dateIn) => {
var year = dateIn.getFullYear();
var month = dateIn.getMonth() + 1; // getMonth() is zero-based
var day = dateIn.getDate();
return year + "-" + month.toString().padStart(2, "0") + "-" + day.toString().padStart(2, "0");
}
var today = new Date();
console.log(dateConverter(today));
คำตอบ
มันเป็นเรื่องเล็กน้อย ขั้นแรกตั้งค่าชั่วโมงจากวันที่ถึง 12 เพื่อหลีกเลี่ยงปัญหาเกี่ยวกับการเปลี่ยนฤดูร้อน / ฤดูหนาว จากนั้นใช้getDate
เพิ่ม 10 สำหรับวันพิเศษและsetDate
ด้วยค่าใหม่ ตอนนี้คุณมีค่าเป็นมิลลิวินาทีแล้วสร้างวันที่ใหม่เพื่อรับ dateobject สำหรับวันที่สองลบ 20 วันเนื่องจากวันที่เดิมถูกเปลี่ยนแปลงโดยการกระทำก่อนหน้านี้และทำอย่างอื่นทั้งหมดเหมือนกัน
รูปแบบการออกสำหรับวันที่มีgetFullYear
, และgetMonth
getDate
เนื่องจากเดือนถูกจัดการใน JS ตั้งแต่ 0 ถึง 11 จึงเพิ่ม 1 เดือน เดือนและวันที่ 1 อาจจะเป็นหลัก แต่คุณอยากให้มันเป็นตัวเลข 2 หลักเพื่อเพิ่มก่อนสตริง"0"
และได้รับล่าสุด 2 slice
ตัวอักษรของมันด้วย
ทำรูปแบบสำหรับวันที่ทั้งสองและส่งคืนเป็นอาร์เรย์
const dateConverter = (dateIn) => {
dateIn.setHours(12);
let dateIn10days = new Date(dateIn.setDate(dateIn.getDate() + 10));
let dateFor10days = new Date(dateIn.setDate(dateIn.getDate() - 20));
let strIn10Days = dateIn10days.getFullYear() + '-' + ('0' +(dateIn10days.getMonth()+1)).slice(-2) + '-' + ('0' + dateIn10days.getDate()).slice(-2);
let strFor10Days = dateFor10days.getFullYear() + '-' + ('0' +(dateFor10days.getMonth()+1)).slice(-2) + '-' + ('0' + dateFor10days.getDate()).slice(-2);
return [strFor10Days, strIn10Days];
}
let today = new Date();
console.log(dateConverter(today));
รหัสนี้จะช่วยคุณ
อ้างอิงJavaScript ที่คำนวณวันที่จากวันนี้ถึง 7 วันก่อน
หลังจาก 10 วันเพียงแค่แปลง - เป็น +
const dateConverter = (dateIn) => {
var dates ={};
var days = 10; // Days you want to subtract
for(let i=0;i<days;i++){
var date = dateIn;
var last = new Date(date.getTime() - (i * 24 * 60 * 60 * 1000));
var day = last.getDate();
var month= last.getMonth()+1;
var year= last.getFullYear();
dates[i] = year + "-" + month.toString().padStart(2, "0") + "-" + day.toString().padStart(2, "0");
}
return dates
}
var today = new Date();
console.log(dateConverter(today));
ลองทำตามนี้
const dateConverter = (dateIn) => {
var year = dateIn.getFullYear();
var month = dateIn.getMonth() + 1; // getMonth() is zero-based
var day = dateIn.getDate();
return year + "-" + month.toString().padStart(2, "0") + "-" + day.toString().padStart(2, "0");
}
var today = new Date();
var numberOfDaysToAdd = 10;
var tenDaysPlus = today.setDate(today.getDate() + numberOfDaysToAdd);
console.log(dateConverter(today));
var today = new Date();
var numberOfDaysToSubtract = 10;
var tenDaysMinus = today.setDate(today.getDate() - numberOfDaysToSubtract);
console.log(dateConverter(today));
ฉันขอแนะนำให้คุณใช้ห้องสมุดช่วงเวลา แต่คุณยังต้องการจาวาสคริปต์ธรรมดา
const convert = (date) => {
const pastDate = new Date(date)
pastDate.setDate(pastDate.getDate() - 10);
const futureDate = new Date(date)
futureDate.setDate(futureDate.getDate() + 10);
return { pastDate, futureDate }
}
ฟังก์ชั่นแปลงการโทรด้วยวันที่ใดก็ได้
ฉันเคยยุ่งเรื่องนั้นมาก่อนเช่นกัน แต่ใน Stack Overflow นี้คุณจะพบคำตอบที่ดีจริงๆ: เพิ่มวันใน JavaScript Date
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));
นี่คือรหัสที่นำมาจากโพสต์นั้น
สำหรับการลบวันให้แทนที่ "+ days" ด้วย "- days"
หวังว่านี่จะช่วยแก้ปัญหาของคุณได้!
คุณสามารถแปลงวันที่ทั้งหมดเป็นtimestamp
แล้วคำนวณด้วย:
const dateTimestamp = new Date("2020-10-10").getTime()
const milisecondsInADay = 60*60*24*1000
const milisecondsInTenDays = milisecondsInADay * 10
const beforeDate = new Date(dateTimestamp - milisecondsInTenDays)
const afterDate = new Date(dateTimestamp + milisecondsInTenDays)
console.log("before", beforeDate)
console.log("after", afterDate)
console.log("initially", new Date(dateTimestamp))