ไม่มีใครรู้วิธีง่ายๆในการนัดเดท (เช่นวันนี้) และย้อนกลับไปสิบวัน?
ตัวอย่างเช่นถ้าฉันต้องการคำนวณวันที่ 5 วันก่อนวันนี้
ไม่มีใครรู้วิธีง่ายๆในการนัดเดท (เช่นวันนี้) และย้อนกลับไปสิบวัน?
ตัวอย่างเช่นถ้าฉันต้องการคำนวณวันที่ 5 วันก่อนวันนี้
คำตอบ:
ลองสิ่งนี้:
var d = new Date();
d.setDate(d.getDate()-5);
โปรดทราบว่าสิ่งนี้จะปรับเปลี่ยนวัตถุวันที่และส่งกลับค่าเวลาของวันที่อัพเดท
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 5);
document.write('<br>5 days ago was: ' + d.toLocaleString());
new Date(new Date().setDate(new Date().getDate()-5))
- ที่จะ 5 วันที่ผ่านมา ในตัวอย่างของคำตอบให้ส่งไปยังวันที่ใหม่เพื่อรับวัตถุวันที่ ดังนั้นnew Date(d)
คือสิ่งที่คุณต้องการ
setDate(-1)
จะกำหนดวันที่เป็นวันสุดท้ายของเดือน
toString
วิธีการเช่นtoISOString
, toDateString
ฯลฯ
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
หากคุณทำการจัดการวันที่มีHeadachyจำนวนมากตลอดทั้งเว็บแอปพลิเคชันของคุณDateJSจะทำให้ชีวิตของคุณง่ายขึ้นมาก:
getTime()
และsetTime()
เป็นมิลลิวินาทีนับตั้งแต่ยุค มันไม่สำคัญว่าถ้าเวลาผ่านไปหนึ่งปี
มันเป็นอะไรเช่นนี้:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
function getDaysAgo(b){var a=new Date;a.setDate(a.getDate()-b);return a};
เพียงแค่var daysAgo45 = getDaysAgo(45);
ฉันสังเกตเห็นว่า getDays + X ไม่ทำงานตามขอบเขตของวัน / เดือน การใช้ getTime นั้นทำงานได้ตราบใดที่วันที่คุณไม่ได้อยู่ก่อนปี 1970
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
รับช่วงเวลา เด็กสุดเท่ห์ทุกคนใช้มัน มันมีตัวเลือกการจัดรูปแบบอื่น ๆ ที่ไหน
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
ไม่จำเป็น! แปลงเป็น JS Date obj สำหรับการโยงเชิงมุม
var date = new Date(dateMnsFive.toISOString());
ไม่จำเป็น! รูปแบบ
var date = dateMnsFive.format("YYYY-MM-DD");
ฉันสร้างต้นแบบนี้สำหรับ Date เพื่อให้ฉันสามารถส่งค่าลบเพื่อลบวันและค่าบวกเพื่อเพิ่มวัน
if(!Date.prototype.adjustDate){
Date.prototype.adjustDate = function(days){
var date;
days = days || 0;
if(days === 0){
date = new Date( this.getTime() );
} else if(days > 0) {
date = new Date( this.getTime() );
date.setDate(date.getDate() + days);
} else {
date = new Date(
this.getFullYear(),
this.getMonth(),
this.getDate() - Math.abs(days),
this.getHours(),
this.getMinutes(),
this.getSeconds(),
this.getMilliseconds()
);
}
this.setTime(date.getTime());
return this;
};
}
ดังนั้นเพื่อใช้มันฉันสามารถเขียน:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
d.setDate(d.getDate() + days)
กับทั้งค่าบวกและค่าลบสำหรับวันเพื่อเพิ่มและลบวันตามลำดับ และควรทำงานกับอินสแตนซ์ (ตามวิธี Date อื่น ๆ ) ไม่สร้างและส่งคืนสำเนา
โซลูชันที่มีอยู่สองสามตัวนั้นใกล้เคียงกัน แต่ก็ไม่ได้เป็นอย่างที่ฉันต้องการ ฟังก์ชั่นนี้ใช้งานได้ทั้งกับค่าบวกหรือค่าลบและจัดการกรณีขอบเขต
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
ฉันชอบทำคณิตศาสตร์เป็นมิลลิวินาที ดังนั้นใช้Date.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
และถ้าคุณชอบรูปแบบ
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
หมายเหตุ: Date.now()
ไม่ทำงานในเบราว์เซอร์รุ่นเก่า (เช่นฉันคิดว่า IE8) polyfill ที่นี่
@socketpair ชี้ถึงความเลอะเทอะของฉัน ในขณะที่เขา / เธอพูดว่า "บางวันในปีมี 23 ชั่วโมงและ 25 เนื่องจากกฎเขตเวลา"
หากต้องการขยายคำตอบข้างต้นจะมีความผิดพลาดในการเปิดเดย์ไลท์ในกรณีที่คุณต้องการคำนวณ LOCAL วัน 5 วันที่ผ่านมาในเขตเวลาที่มีการเปลี่ยนแปลงตามเวลากลางวันและคุณ
Date.now()
ให้ LOCAL ปัจจุบันแก่คุณในขณะนี้หรือ.toString()
ที่ส่งกลับวันที่ท้องถิ่นและดังนั้นจึงไม่สามารถใช้ร่วมกับDate.now()
วันที่ฐานใน UTC อย่างไรก็ตามมันจะทำงานถ้าคุณทำคณิตศาสตร์ของคุณทั้งหมดใน UTC เช่น
A. คุณต้องการเวลา UTC 5 วันที่แล้วจากทันที (UTC)
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC
new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString
B. คุณเริ่มต้นด้วยวันที่พื้นฐาน UTC อื่นที่ไม่ใช่ "ตอนนี้" โดยใช้ Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
ฉันพบปัญหากับเมธอด getDate () / setDate () ก็คือมันง่ายเกินไปที่จะเปลี่ยนทุกอย่างเป็นมิลลิวินาทีและบางครั้งไวยากรณ์ก็ยากสำหรับฉันที่จะติดตาม
แต่ฉันชอบที่จะทำงานจากข้อเท็จจริงที่ว่า 1 วัน = 86,400,000 มิลลิวินาที
ดังนั้นสำหรับคำถามเฉพาะของคุณ:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
ทำงานเหมือนจับใจ
ฉันใช้วิธีนี้ตลอดเวลาเพื่อทำการคำนวณ 30/60/365 วัน
คุณสามารถคาดการณ์สิ่งนี้เพื่อสร้างหน่วยเวลาเป็นเดือนปี ฯลฯ
แยกวันที่ของคุณออกเป็นส่วน ๆ จากนั้นส่งคืนวันที่ใหม่ด้วยค่าที่ปรับ
function DateAdd(date, type, amount){
var y = date.getFullYear(),
m = date.getMonth(),
d = date.getDate();
if(type === 'y'){
y += amount;
};
if(type === 'm'){
m += amount;
};
if(type === 'd'){
d += amount;
};
return new Date(y, m, d);
}
จำไว้ว่าเดือนนั้นเป็นศูนย์ แต่ขึ้นอยู่กับวัน เช่นวันที่ใหม่ (2009, 1, 1) == 01 กุมภาพันธ์ 2009, วันที่ใหม่ (2009, 1, 0) == 31 มกราคม 2009;
โดยไม่ใช้ตัวแปรตัวที่สองคุณสามารถแทนที่ 7 for ด้วย back x days ของคุณ:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
function addDays (date, daysToAdd) {
var _24HoursInMilliseconds = 86400000;
return new Date(date.getTime() + daysToAdd * _24HoursInMilliseconds);
};
var now = new Date();
var yesterday = addDays(now, - 1);
var tomorrow = addDays(now, 1);
ฉันได้สร้างฟังก์ชั่นสำหรับจัดการวันที่ คุณสามารถเพิ่มหรือลบจำนวนวันชั่วโมงนาที
function dateManipulation(date, days, hrs, mins, operator) {
date = new Date(date);
if (operator == "-") {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() - durationInMs);
} else {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() + durationInMs);
}
return newDate;
}
ตอนนี้เรียกใช้ฟังก์ชันนี้โดยผ่านพารามิเตอร์ ตัวอย่างเช่นนี่คือการเรียกใช้ฟังก์ชันเพื่อรับวันที่ก่อน 3 วันนับจากวันนี้
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
ใช้MomentJS
function getXDaysBeforeDate(referenceDate, x) {
return moment(referenceDate).subtract(x , 'day').format('MMMM Do YYYY, h:mm:ss a');
}
var yourDate = new Date(); // let's say today
var valueOfX = 7; // let's say 7 days before
console.log(getXDaysBeforeDate(yourDate, valueOfX));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
คำตอบที่นำไปสู่ข้อผิดพลาดในรหัสของฉันที่ในวันแรกของเดือนมันจะตั้งวันที่ในอนาคตในเดือนปัจจุบัน นี่คือสิ่งที่ฉันทำ
curDate = new Date(); // Took current date as an example
prvDate = new Date(0); // Date set to epoch 0
prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set epoch time
วิธีง่ายๆในการจัดการวันที่คือMoment.js
add
คุณสามารถใช้ ตัวอย่าง
var startdate = "20.03.2014";
var new_date = moment(startdate, "DD.MM.YYYY");
new_date.add(5, 'days'); //Add 5 days to start date
alert(new_date);
ฉันชอบสิ่งต่อไปนี้เพราะมันเป็นหนึ่งบรรทัด ไม่สมบูรณ์แบบกับการเปลี่ยนแปลงเวลา แต่มักจะดีพอสำหรับความต้องการของฉัน
var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
สำหรับฉันชุดค่าผสมทั้งหมดทำงานได้ดีกับตัวอย่างโค้ดด้านล่างตัวอย่างสำหรับการใช้งาน Angular-2 หากคุณต้องการเพิ่มวันส่งจำนวนบวกของวันถ้าคุณต้องการ substract ผ่านจำนวนลบของวัน
function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
d.getFullYear(),
d.getMonth(),
(d.getDate() + numberofDays)
);
}
ฉันได้รับไมล์สะสมที่ดีจาก date.js:
d = new Date();
d.add(-10).days(); // subtract 10 days
ดี!
เว็บไซต์รวมถึงความงามนี้:
Datejs ไม่เพียง แต่แยกสตริงมันแบ่งมันออกเป็นสองส่วนอย่างสะอาด
หากคุณต้องการลบจำนวนวันและจัดรูปแบบวันที่ของคุณในรูปแบบที่มนุษย์สามารถอ่านได้คุณควรพิจารณาสร้าง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. Subtract 5 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -5));
(ดูซอนี้ )
ดูรหัสต่อไปนี้ลบวันนับจากวันที่ปัจจุบัน นอกจากนี้ตั้งเดือนตามวันที่ถูกแทนที่
var today = new Date();
var substract_no_of_days = 25;
today.setTime(today.getTime() - substract_no_of_days* 24 * 60 * 60 * 1000);
var substracted_date = (today.getMonth()+1) + "/" +today.getDate() + "/" + today.getFullYear();
alert(substracted_date);
เมื่อตั้งค่าวันที่วันที่แปลงเป็นมิลลิวินาทีดังนั้นคุณต้องแปลงกลับเป็นวันที่:
วิธีนี้ยังคำนึงถึงการเปลี่ยนแปลงปีใหม่ ฯลฯ
function addDays( date, days ) {
var dateInMs = date.setDate(date.getDate() - days);
return new Date(dateInMs);
}
var date_from = new Date();
var date_to = addDays( new Date(), parseInt(days) );
คุณสามารถใช้ Javascript
var CurrDate = new Date(); // Current Date
var numberOfDays = 5;
var days = CurrDate.setDate(CurrDate.getDate() + numberOfDays);
alert(days); // It will print 5 days before today
สำหรับ PHP
$date = date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;
หวังว่ามันจะช่วยคุณ
ฉันแปลงเป็นมิลลิวินาทีและหักวันอื่นเดือนและปีจะไม่เปลี่ยนแปลงและมีเหตุผล
var numberOfDays = 10;//number of days need to deducted or added
var date = "01-01-2018"// date need to change
var dt = new Date(parseInt(date.substring(6), 10), // Year
parseInt(date.substring(3,5), 10) - 1, // Month (0-11)
parseInt(date.substring(0,2), 10));
var new_dt = dt.setMilliseconds(dt.getMilliseconds() - numberOfDays*24*60*60*1000);
new_dt = new Date(new_dt);
var changed_date = new_dt.getDate()+"-"+(new_dt.getMonth()+1)+"-"+new_dt.getFullYear();
หวังว่าจะช่วย
var date = new Date();
var day = date.getDate();
var mnth = date.getMonth() + 1;
var fDate = day + '/' + mnth + '/' + date.getFullYear();
document.write('Today is: ' + fDate);
var subDate = date.setDate(date.getDate() - 1);
var todate = new Date(subDate);
var today = todate.getDate();
var tomnth = todate.getMonth() + 1;
var endDate = today + '/' + tomnth + '/' + todate.getFullYear();
document.write('<br>1 days ago was: ' + endDate );
การใช้ไวยากรณ์ฟังก์ชั่น Modern JavaScript
const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));
console.log(getDaysPastDate(1)); // yesterday
ลองอะไรเช่นนี้
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDateอาจเป็นวันใดก็ได้
ขีด จำกัดอาจแตกต่างกันในจำนวนวัน (บวกสำหรับอนาคตและลบสำหรับอดีต)
สิ่งนี้จะให้ผล 10 วันสุดท้าย 110% การทำงานคุณจะไม่ได้รับปัญหาใด ๆ
var date = new Date();
var day=date.getDate();
var month=date.getMonth() + 1;
var year=date.getFullYear();
var startDate=day+"/"+month+"/"+year;
var dayBeforeNineDays=moment().subtract(10, 'days').format('DD/MM/YYYY');
startDate=dayBeforeNineDays;
var endDate=day+"/"+month+"/"+year;
คุณสามารถเปลี่ยนวันที่ลบได้ตามความต้องการของคุณ
var daysToSubtract = 3;
$.datepicker.formatDate('yy/mm/dd', new Date() - daysToSubtract) ;
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 31);
document.write('<br>5 days ago was: ' + d.toLocaleString());