28 ответов:
попробуйте что-то вроде этого:
var d = new Date(); d.setDate(d.getDate()-5);обратите внимание, что это изменяет объект date и возвращает значение времени обновленной даты.
var d = new Date(); document.write('Today is: ' + d.toLocaleString()); d.setDate(d.getDate() - 5); document.write('<br>5 days ago was: ' + d.toLocaleString());
var dateOffset = (24*60*60*1000) * 5; //5 days var myDate = new Date(); myDate.setTime(myDate.getTime() - dateOffset);Если вы выполняете много головокружительных манипуляций с датами в своем веб-приложении,DateJS сделает вашу жизнь намного проще:
это звучит примерно так:
var d = new Date(); // today! var x = 5; // go back 5 days! d.setDate(d.getDate() - x);
Я заметил, что getDays+ X не работает над границами день/месяц. Использование getTime работает до тех пор, пока ваша дата не до 1970 года.
var todayDate = new Date(), weekDate = new Date(); weekDate.setTime(todayDate.getTime()-(7*24*3600000));
Я сделал этот прототип для даты, чтобы я мог передавать отрицательные значения для вычитания дней и положительные значения для добавления дней.
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);
получи момент.js. Все классные дети используют его. Он имеет дополнительные параметры форматирования и т. д. Где
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");
разделить дату на части, а затем вернуть новую дату с скорректированными значениями
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;
мне нравится делать математику в миллисекундах. Так что используйте
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, я думаю). полифилл здесь.обновление июня 2015
@socketpair указал на мою неряшливость. Как он говорит, "в какой-то день в году есть 23 часа, а некоторые 25 из-за правил часового пояса".
чтобы расширить это, ответ выше будет иметь времени неточности, в том случае, когда вы хотите, чтобы вычислить день 5 дней назад в часового пояса и времени изменения, а вы
- предположить (ошибочно), что
Date.now()дает вам текущее местное время, или- использовать
.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 toStringB. Вы начинаете с базовой даты UTC, отличной от "сейчас", используя
Date.UTC()newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000; new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
несколько существующих решений были близки, но не совсем то, что я хотел. Эта функция работает как с положительными, так и с отрицательными значениями и обрабатывает граничные случаи.
function addDays(date, days) { return new Date( date.getFullYear(), date.getMonth(), date.getDate() + days, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds() ); }
Я нахожу проблему с методом 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 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);
верхние ответы привели к ошибке в моем коде, где в первом месяце он установил бы будущую дату в текущем месяце. Вот что я сделал
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
простой способ управления датами является использование момент.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);
для меня все комбинации работали нормально С ниже код snipplet , фрагмент кода предназначен для реализации Angular-2 , если вам нужно добавить дней, пройти положительный numberofDays, если вам нужно вычесть пройти отрицательный numberofDays
function addSubstractDays(date: Date, numberofDays: number): Date { let d = new Date(date); return new Date( d.getFullYear(), d.getMonth(), (d.getDate() + numberofDays) ); }
Я получаю хороший пробег из даты.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));(см. Также эта скрипка)
использовать 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>
при установке даты дата преобразуется в миллисекунды, поэтому вам нужно преобразовать ее обратно в дату:
этот метод также учитывать, новогодние изменения и т. д.
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 d = new Date(); document.write('Today is: ' + d.toLocaleString()); d.setDate(d.getDate() - 31); document.write('<br>5 days ago was: ' + d.toLocaleString());
люблю, потому что это одна линия. Не идеально с изменениями DST, но обычно достаточно хорошо для моих нужд.
var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
var d = new Date(); document.write('Today is: ' + d.toLocaleString()); d.setDate(d.getDate() - 100); document.write('<br>100 days ago was: ' + d.toLocaleString());
без использования второй переменной, вы можете заменить 7 Для с вашей задней x дней
пусть d=новая дата (new Date ().getTime() - (7 * 24 * 60 * 60 * 1000))
я преобразовал в миллисекунду и вычитал дни еще месяц и год не изменится и логично
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();надеюсь поможет
Я создал функцию для обработки даты. вы можете добавить или вычесть любое количество дней, часов, минут.
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, "-");
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 );
var my date = new Date().toISOString().substring(0, 10);он может дать вам только дата, как 2014-06-20. надеюсь поможет
Comments