Herkes bir tarih (örneğin Bugün) almak ve X gün geri gitmek için kolay bir yol biliyor mu?
Örneğin, bugünden 5 gün önce tarihi hesaplamak istersem.
Herkes bir tarih (örneğin Bugün) almak ve X gün geri gitmek için kolay bir yol biliyor mu?
Örneğin, bugünden 5 gün önce tarihi hesaplamak istersem.
Yanıtlar:
Bunun gibi bir şey deneyin:
var d = new Date();
d.setDate(d.getDate()-5);
Bunun tarih nesnesini değiştirdiğini ve güncellenen tarihin zaman değerini döndürdüğünü unutmayın.
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))
- bu 5 gün önce olacak. Yanıt örneğinde, bir tarih nesnesi almak için yeni bir tarihe iletin. Yani new Date(d)
ne istiyorsun.
setDate(-1)
tarihi ayın son gününe ayarlayacak
toString
gibi yöntemlerle toISOString
, toDateString
vb
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Web uygulamanız boyunca çok sayıda baş ağrılı tarih manipülasyonu gerçekleştiriyorsanız, DateJS hayatınızı daha kolay hale getirecektir:
getTime()
ve setTime()
çağdan beri milisaniyedir. Sürenin bir yıl sınırını aşması önemli değil.
Böyle bir şey gider:
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};
o zaman sadecevar daysAgo45 = getDaysAgo(45);
GetDays + X'in gün / ay sınırları içinde çalışmadığını fark ettim. GetTime kullanımı, tarihiniz 1970'ten önce olmadığı sürece çalışır.
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
moment.js dosyasını edinin. Tüm havalı çocuklar kullanıyor. Daha fazla biçimlendirme seçeneği vb. Vardır.
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
İsteğe bağlı! Açısal ciltleme için JS Date nesnesine dönüştür.
var date = new Date(dateMnsFive.toISOString());
İsteğe bağlı! Biçim
var date = dateMnsFive.format("YYYY-MM-DD");
Date için bu prototipi, günleri çıkarmak için negatif değerler ve gün eklemek için pozitif değerler iletebilmem için yaptım.
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;
};
}
Yani, kullanmak için yazabilirim:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
d.setDate(d.getDate() + days)
pozitif ve negatif değerlerle kullanabilirsiniz . Ve bir kopya oluşturup döndürmemek için örnek üzerinde çalışmalıdır (diğer Tarih yöntemleri gibi).
Mevcut çözümlerden birkaçı yakındı, ama tam olarak istediğim gibi değildi. Bu işlev hem pozitif hem de negatif değerlerle çalışır ve sınır durumlarını işler.
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
Matematiği milisaniye içinde yapmayı seviyorum. Öyleyse kullanDate.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
ve eğer biçimlendirilmiş isterseniz
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
NOT: Date.now()
eski tarayıcılarda çalışmaz (örneğin IE8 sanırım). Burada çoklu doldurun .
@socketpair özensizliğime dikkat çekti. Dediği gibi "Yılın bir günü 23 saat, saat 25'i saat dilimi kuralları nedeniyle".
Bunu genişletmek için, yukarıdaki cevap, 5 gün önce LOCAL gününü gün ışığından yararlanma değişiklikleri içeren bir saat diliminde hesaplamak istediğinizde gün ışığından yararlanma yanlışlıklarına sahip olacak ve
Date.now()
Sana şu anki LOCAL zamanını verdiğini (yanlış) varsayalım veya.toString()
nedenle yerel tarih döner ve uyumsuzdur Date.now()
UTC temel tarih. Ancak, matematiğinizi UTC'de gerçekleştiriyorsanız çalışır, ör.
A. UTC tarihini 5 gün önce NOW'dan (UTC) istiyorsunuz.
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. "Şimdi" dışında bir UTC temel tarihiyle başlayarak 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 () yöntemiyle ilgili bir sorun buldum, her şeyi milisaniyeye kolayca çeviriyor ve sözdizimi bazen benim için zor.
Bunun yerine, 1 gün = 86.400.000 milisaniye olduğunu düşünmeyi seviyorum.
Yani, sorunuz için:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Tıkır tıkır çalışıyor.
30/60/365 günlük hesaplamalar yapmak için bu yöntemi her zaman kullanıyorum.
Aylar, yıllar vb. İçin zaman birimleri oluşturmak üzere bunu kolayca tahmin edebilirsiniz.
tarihinizi parçalara ayırın, ardından ayarlanan değerlerle yeni bir Tarih döndürün
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);
}
Ayların sıfır temelli olduğunu, ancak günlerin olmadığını unutmayın. yani yeni Tarih (2009, 1, 1) == 01 Şubat 2009, yeni Tarih (2009, 1, 0) == 31 Ocak 2009;
İkinci değişkeni kullanmadan, 7 değerini arka x günlerinizle değiştirebilirsiniz:
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);
Tarih manipülasyonu için bir fonksiyon yarattım. istediğiniz sayıda gün, saat, dakika ekleyebilir veya çıkarabilirsiniz.
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;
}
Şimdi, parametreleri ileterek bu işlevi çağırın. Örneğin, bugünden 3 gün öncesine tarih almak için bir işlev çağrısı.
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
MomentJS kullanın .
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>
En iyi yanıtlar, kodumda ayın ilkinde geçerli ayın gelecekteki bir tarihini belirleyecek bir hataya yol açtı. İşte yaptığım şey,
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
Tarihleri yönetmenin kolay bir yolu Moment.js kullanmaktır
Kullanabilirsiniz add
. Misal
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);
Dokümanlar http://momentjs.com/docs/#/manipulating/add/
benim için tüm kombinasyonlar aşağıdaki kod snipleti ile iyi çalıştı, snippet Angular-2 uygulaması için, eğer gün eklemeniz gerekiyorsa, pozitif numberofDays'i geçmeniz gerekiyorsa, negatif numberofDays'ı geçmeniz gerekiyorsa
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ışında iyi kilometre performansı elde ederim:
d = new Date();
d.add(-10).days(); // subtract 10 days
Güzel!
Web sitesi bu güzelliği içerir:
Datejs sadece dizeleri ayrıştırmakla kalmıyor, aynı zamanda
Hem birkaç günü çıkarmak hem de tarihinizi insan tarafından okunabilir bir biçimde biçimlendirmek istiyorsanız DateHelper
, şuna benzer bir özel nesne oluşturmayı düşünmelisiniz :
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));
(ayrıca bu Fiddle'a bakın )
Aşağıdaki koda bakın, günleri geçerli tarihten çıkarın. Ayrıca, ayı çıkarılan tarihe göre ayarlayın.
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);
Tarihi ayarlarken, tarih milisaniyeye dönüştürülür, bu nedenle tarihi bir tarihe dönüştürmeniz gerekir:
Bu yöntem de, yeni yıl değişikliği vb.
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'i kullanabilirsiniz.
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 için,
$date = date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;
Umarım size yardımcı olur.
Milisaniyeye dönüştüm ve ay ve yıl değişmez ve mantıklı değil
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();
Umut yardımcı olur
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 işlevinin söz dizimini kullanma
const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));
console.log(getDaysPastDate(1)); // yesterday
Böyle bir şey dene
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate herhangi bir tarih olabilir
limit gün sayısındaki fark olabilir (gelecek için pozitif ve geçmiş için negatif)
Bu size son 10 gün sonucunu verecek% 110 çalışma herhangi bir sorun almayacaksınız
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;
çıkarma günlerini ihtiyaçlarınıza göre değiştirebilirsiniz
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());