Adakah yang tahu cara mudah untuk berkencan (mis. Hari ini) dan kembali ke X hari?
Jadi, misalnya, jika saya ingin menghitung tanggal 5 hari sebelum hari ini.
Adakah yang tahu cara mudah untuk berkencan (mis. Hari ini) dan kembali ke X hari?
Jadi, misalnya, jika saya ingin menghitung tanggal 5 hari sebelum hari ini.
Jawaban:
Coba sesuatu seperti ini:
var d = new Date();
d.setDate(d.getDate()-5);
Perhatikan bahwa ini memodifikasi objek tanggal dan mengembalikan nilai waktu dari tanggal yang diperbarui.
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))
- itu akan menjadi 5 hari yang lalu. Dalam contoh jawaban, berikan ke tanggal baru untuk mendapatkan objek kencan. Jadi new Date(d)
apa yang kamu inginkan.
setDate(-1)
akan menetapkan tanggal ke hari terakhir bulan itu
toString
metode seperti toISOString
, toDateString
, dll
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Jika Anda melakukan banyak manipulasi tanggal headachy di seluruh aplikasi web Anda, DateJS akan membuat hidup Anda lebih mudah:
getTime()
dan setTime()
milidetik sejak zaman. Seharusnya tidak masalah jika waktu melewati batas tahun.
Bunyinya seperti ini:
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};
maka cukupvar daysAgo45 = getDaysAgo(45);
Saya perhatikan bahwa getDays + X tidak berfungsi melebihi batas hari / bulan. Menggunakan getTime berfungsi selama kencan Anda tidak sebelum tahun 1970.
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
dapatkan moment.js. Semua anak keren menggunakannya. Ini memiliki lebih banyak opsi pemformatan, dll. Di mana
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
Pilihan! Konversi ke JS Date obj untuk Angular binding.
var date = new Date(dateMnsFive.toISOString());
Pilihan! Format
var date = dateMnsFive.format("YYYY-MM-DD");
Saya membuat prototipe ini untuk Date sehingga saya bisa memberikan nilai negatif untuk mengurangi hari dan nilai positif untuk menambah hari.
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;
};
}
Jadi, untuk menggunakannya saya cukup menulis:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
d.setDate(d.getDate() + days)
nilai positif dan negatif selama berhari - hari untuk menambah dan mengurangi hari. Dan itu harus bekerja pada instance (seperti metode Date lainnya), tidak membuat dan mengembalikan salinan.
Beberapa solusi yang ada sudah dekat, tetapi tidak persis seperti yang saya inginkan. Fungsi ini berfungsi dengan nilai positif atau negatif dan menangani kasus batas.
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
Saya suka mengerjakan matematika dalam milidetik. Jadi gunakanDate.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
dan jika Anda suka diformat
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
CATATAN: Date.now()
tidak berfungsi di browser yang lebih lama (mis. IE8 saya pikir). Polyfill di sini .
@socketpair menunjukkan kecerobohan saya. Seperti yang dia katakan, "Suatu hari dalam setahun memiliki 23 jam, dan beberapa 25 karena aturan zona waktu".
Untuk memperluasnya, jawaban di atas akan memiliki ketidakakuratan penghematan cahaya siang hari dalam kasus di mana Anda ingin menghitung LOKAL hari 5 hari yang lalu di zona waktu dengan perubahan daylightaving dan Anda
Date.now()
memberi Anda LOKAL sekarang waktu sekarang, atau.toString()
yang mengembalikan tanggal lokal dan karenanya tidak sesuai dengan Date.now()
tanggal dasar dalam UTC. Namun, ini berfungsi jika Anda mengerjakan semua matematika di UTC, mis
A. Anda menginginkan tanggal UTC 5 hari yang lalu dari SEKARANG (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. Anda mulai dengan tanggal dasar UTC selain "sekarang", menggunakan Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
Saya menemukan masalah dengan metode getDate () / setDate () adalah terlalu mudah mengubah semuanya menjadi milidetik, dan sintaksisnya terkadang sulit untuk saya ikuti.
Alih-alih saya suka bekerja dengan fakta bahwa 1 hari = 86.400.000 milidetik.
Jadi, untuk pertanyaan khusus Anda:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Bekerja seperti pesona.
Saya menggunakan metode ini sepanjang waktu untuk melakukan perhitungan 30/60/365 hari bergulir.
Anda dapat dengan mudah memperkirakan ini untuk membuat satuan waktu selama berbulan-bulan, bertahun-tahun, dll.
pisahkan tanggal Anda menjadi beberapa bagian, lalu kembalikan Tanggal baru dengan nilai yang disesuaikan
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);
}
Ingat bahwa bulan-bulan berdasarkan nol, tetapi hari-hari tidak. yaitu Tanggal baru (2009, 1, 1) == 01 Februari 2009, Tanggal baru (2009, 1, 0) == 31 Januari 2009;
Tanpa menggunakan variabel kedua, Anda dapat mengganti 7 dengan punggung x hari:
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);
Saya telah membuat fungsi untuk manipulasi tanggal. Anda dapat menambah atau mengurangi jumlah hari, jam, menit.
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;
}
Sekarang, panggil fungsi ini dengan mengirimkan parameter. Misalnya, ini adalah panggilan fungsi untuk mendapatkan tanggal sebelum 3 hari dari hari ini.
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
Gunakan 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>
Jawaban teratas menyebabkan bug dalam kode saya di mana pada bulan pertama akan menetapkan tanggal di bulan ini. Inilah yang saya lakukan,
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
Cara mudah untuk mengelola tanggal adalah menggunakan Moment.js
Anda bisa menggunakannya add
. Contoh
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);
bagi saya semua kombinasi bekerja dengan baik dengan snipplet kode di bawah, snippet adalah untuk implementasi Angular-2, jika Anda perlu menambahkan hari, berikan angka positifDari, jika Anda perlu mengurangi angka negatifjumlah hari
function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
d.getFullYear(),
d.getMonth(),
(d.getDate() + numberofDays)
);
}
Saya mendapatkan jarak tempuh yang baik dari tanggal. Js:
d = new Date();
d.add(-10).days(); // subtract 10 days
Bagus!
Situs web menyertakan keindahan ini:
Datejs tidak hanya mengurai string, ia mengirisnya dengan rapi menjadi dua
Jika Anda ingin mengurangi beberapa hari dan memformat tanggal Anda dalam format yang dapat dibaca manusia, Anda harus mempertimbangkan untuk membuat DateHelper
objek kustom yang terlihat seperti ini:
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));
(Lihat juga Fiddle ini )
Lihat kode berikut, kurangi hari dari tanggal saat ini. Juga, atur bulan sesuai dengan tanggal yang dikurangi.
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);
Saat mengatur tanggal, tanggal dikonversi menjadi milidetik, jadi Anda perlu mengubahnya kembali menjadi tanggal:
Metode ini juga mempertimbangkan perubahan tahun baru, dll.
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) );
Anda bisa menggunakan 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
Untuk PHP,
$date = date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;
Semoga ini bisa membantu Anda.
Saya dikonversi menjadi milidetik dan mengurangi hari lain bulan dan tahun tidak akan berubah dan logis
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();
Semoga bisa membantu
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 );
Menggunakan sintaks fungsi JavaScript Modern
const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));
console.log(getDaysPastDate(1)); // yesterday
Coba sesuatu seperti ini
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate bisa tanggal kapan saja
batas bisa menjadi perbedaan dalam jumlah hari (positif untuk masa depan dan negatif untuk masa lalu)
Ini akan memberi Anda hasil 10 hari terakhir, 110% berfungsi, Anda tidak akan mendapatkan masalah apa pun
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;
Anda dapat mengubah hari pengurangan sesuai dengan kebutuhan Anda
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());