Я хочу позволить пользователям легко складывать и вычитать даты с помощью JavaScript, чтобы просматривать записи по дате.
Даты имеют формат: "mm/dd/yyy". Я хочу, чтобы они могли нажать кнопку "Далее", и если дата: "06/01/2012", то при нажатии кнопки "Далее" она должна стать: "06/02/2012". Если они нажмут кнопку 'prev', то дата должна стать "05/31/2012".
Необходимо отслеживать високосные годы, количество дней в месяце и т.д.
Есть идеи?
P.S. Использование AJAX для получения даты с сервера - не вариант, это немного лаги и не тот опыт для пользователя, который хочет клиент.
Код:
var date = new Date('2011', '01', '02');
alert('the original date is ' + date);
var newdate = new Date(date);
newdate.setDate(newdate.getDate() - 7); // minus the date
var nd = new Date(newdate);
alert('the new date is ' + nd);
Использование Datepicker:
$("#in").datepicker({
minDate: 0,
onSelect: function(dateText, inst) {
var actualDate = new Date(dateText);
var newDate = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()+1);
$('#out').datepicker('option', 'minDate', newDate );
}
});
$("#out").datepicker();
Дополнительные материалы, которые могут пригодиться:
getDate() Returns the day of the month (from 1-31)
getDay() Returns the day of the week (from 0-6)
getFullYear() Returns the year (four digits)
getHours() Returns the hour (from 0-23)
getMilliseconds() Returns the milliseconds (from 0-999)
getMinutes() Returns the minutes (from 0-59)
getMonth() Returns the month (from 0-11)
getSeconds() Returns the seconds (from 0-59)
Хорошая ссылка: MDN Date
Вам нужно использовать gettime () так и setTime()чтобы добавить или вычесть время в JavaScript-объект Date. Используя
setDate()и
функции getdate () будет приводить к ошибкам при достижении пределов месяцев 1, 30, 31, и т. д..
Используя setTime позволяет установить смещение в миллисекундах, и пусть дата рисунок объекта отдыха:
var now=new Date();
var yesterdayMs = now.getTime() - 1000*60*60*24*1; // Offset by one day;
now.setTime( yesterdayMs );
startdate.setDate(startdate.getDate() - daysToSubtract);
startdate.setDate(startdate.getDate() + daysToAdd);
Объект в JavaScript "дата" может помочь здесь.
Первый шаг состоит в преобразовании этих строк в "дата" экземпляры. Что'легко сделать с:
var str = "06/07/2012"; // E.g., "mm/dd/yyyy";
var dt = new Date(parseInt(str.substring(6), 10), // Year
parseInt(str.substring(0, 2), 10) - 1, // Month (0-11)
parseInt(str.substring(3, 5), 10)); // Day
Затем вы можете делать всякие полезные расчеты. Дат в JavaScript понимаю, високосные годы и тому подобное. Они используют идеализированное понятие как "день" на что именно 86,400 секунд. Их базовое значение является числом миллисекунд с начала эпохи (в полночь, 1 января, 1970); он может быть отрицательное число для даты, предшествующие эпохи.
Подробнее на странице MDN на дата
.
Вы могли бы также рассмотреть возможность использования библиотек типа MomentJS, который поможет с разбора, делать дата математика, форматирование...
Может быть, это может помочь
<script type="text/javascript" language="javascript">
function AddDays(toAdd) {
if (!toAdd || toAdd == '' || isNaN(toAdd)) return;
var d = new Date();
d.setDate(d.getDate() + parseInt(toAdd));
document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear();
}
function SubtractDays(toAdd) {
if (!toAdd || toAdd == '' || isNaN(toAdd)) return;
var d = new Date();
d.setDate(d.getDate() - parseInt(toAdd));
document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear();
}
</script>
---------------------- UI ---------------
<div id="result">
</div>
<input type="text" value="0" onkeyup="AddDays(this.value);" />
<input type="text" value="0" onkeyup="SubtractDays(this.value);" />
//In order to get yesterday's date in mm/dd/yyyy.
function gimmeYesterday(toAdd) {
if (!toAdd || toAdd == '' || isNaN(toAdd)) return;
var d = new Date();
d.setDate(d.getDate() - parseInt(toAdd));
var yesterDAY = (d.getMonth() +1) + "/" + d.getDate() + "/" + d.getFullYear();
$("#endDate").html(yesterDAY);
}
$(document).ready(function() {
gimmeYesterday(1);
});
вы можете попробовать здесь:
Работа с датами в JavaScript-это всегда немного хлопот. Я всегда в конечном итоге с помощью библиотеки. Moment.js и XDate оба отличные:
Скрипка:
var $output = $('#output'),
tomorrow = moment().add('days', 1);
$('<pre />').appendTo($output).text(tomorrow);
tomorrow = new XDate().addDays(-1);
$('<pre />').appendTo($output).text(tomorrow);
Как мне нравится, если у вас есть объект Date, вы можете вычесть другую дату объекте, чтобы получить разницу. Объекты даты date основываются на миллисекундах с определенной даты.
var date1 = new Date(2015, 02, 18); // "18/03/2015", month is 0-index
var date2 = new Date(2015, 02, 20); // "20/03/2015"
var msDiff = date2 - date1; // 172800000, this is time in milliseconds
var daysDiff = msDiff / 1000 / 60 / 60 / 24; // 2 days
Так вот как вычесть даты. Теперь, если вы хотите, чтобы добавить их? дата1 + дата2 выдает ошибку.. но если я хочу получить время в МС, я могу использовать:
var dateMs = date1 - 0;
// say I want to add 5 days I can use
var days = 5;
var msToAdd = days * 24 * 60 * 60 * 1000;
var newDate = new Date(dateMs + msToAdd);
Путем вычитания 0 вы поворачиваете объект Date в формате миллисекунд.
Для отслеживания дат вы можете использовать родной объект javascript Date. Он покажет вам текущую дату, позволит отслеживать специфические для календаря вещи и даже поможет вам управлять различными часовыми поясами. Вы можете добавлять и вычитать дни/часы/секунды, чтобы изменить дату, с которой вы работаете, или вычислить новые даты.
Чтобы узнать больше, взгляните на эту справку об объекте:
Надеюсь, это поможет!
Все эти функции для добавления даты неверны. Вы передаете неправильный месяц до даты. Более подробную информацию о проблеме : http://www.domdigger.com/blog/?p=9
var date = new Date('your date string here'); // e.g. '2017-11-21'
var newdate = new Date(date.getTime() + 24*60*60*1000 * days) // days is the number of days you want to shift the date by
Это единственное решение, которое надежно работает при добавлении/вычитание через месяцы и годы. Понял это после того, как провожу слишком много времени возиться с getdate и методы setDate, пытается приспособиться за месяц/год смены.
decasteljau (в этой теме) уже отвечала на этот вопрос, но просто хочу подчеркнуть полезность этого метода, потому что 90% ответов там рекомендуют getdate и setDate подход.
Лучшее свидание утилиты я'используется ve-это дату-ФНС по нескольким причинам:
формат даты
.Менеджер пакетов:
в "дата-ФНС" и: " у^1.30.1"
в
Код:
импорт { addDays, subDays } с 'дата-ФНС'`
let today = new Date()
let yesterday = subDays(today, 1)
let tomorrow = addDays(today, 1)
Простой и удивительный.
Что-то я использую (требуется библиотека jQuery), в моем скрипте мне нужно на текущий день, но конечно вы можете изменить его соответствующим образом.
HTML-код:
<label>Date:</label><input name="date" id="dateChange" type="date"/>
<input id="SubtractDay" type="button" value="-" />
<input id="AddDay" type="button" value="+" />
На JavaScript:
var counter = 0;
$("#SubtractDay").click(function() {
counter--;
var today = new Date();
today.setDate(today.getDate() + counter);
var formattedDate = new Date(today);
var d = ("0" + formattedDate.getDate()).slice(-2);
var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2);
var y = formattedDate.getFullYear();
$("#dateChange").val(d + "/" + m + "/" + y);
});
$("#AddDay").click(function() {
counter++;
var today = new Date();
today.setDate(today.getDate() + counter);
var formattedDate = new Date(today);
var d = ("0" + formattedDate.getDate()).slice(-2);
var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2);
var y = formattedDate.getFullYear();
$("#dateChange").val(d + "/" + m + "/" + y);
});