kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Click Upvote
Click Upvote
Вопрос

Как складывать/вычитать даты с помощью JavaScript?

Я хочу позволить пользователям легко складывать и вычитать даты с помощью JavaScript, чтобы просматривать записи по дате.

Даты имеют формат: "mm/dd/yyy". Я хочу, чтобы они могли нажать кнопку "Далее", и если дата: "06/01/2012", то при нажатии кнопки "Далее" она должна стать: "06/02/2012". Если они нажмут кнопку 'prev', то дата должна стать "05/31/2012".

Необходимо отслеживать високосные годы, количество дней в месяце и т.д.

Есть идеи?

P.S. Использование AJAX для получения даты с сервера - не вариант, это немного лаги и не тот опыт для пользователя, который хочет клиент.

67 2012-06-07T11:55:54+00:00 13
Brett DeWoody
Brett DeWoody
Редактировал вопрос 23-го июля 2017 в 3:38
Программирование
javascript
jquery
date
jquery-ui-datepicker
Решение / Ответ
 Tats_innit
Tats_innit
7-го июня 2012 в 12:00
2012-06-07T12:00:53+00:00
Дополнительно
Источник
Редактировать
#16378590

Код:

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();​

JSFiddle Demo

Дополнительные материалы, которые могут пригодиться:

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

M.A.K. Ripon
M.A.K. Ripon
Редактировал ответ 8-го октября 2018 в 8:20
89
0
 decasteljau
decasteljau
25-го августа 2013 в 1:33
2013-08-25T01:33:28+00:00
Дополнительно
Источник
Редактировать
#16378596

Вам нужно использовать 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 );
38
0
Romil  Kumar Jain
Romil Kumar Jain
7-го июня 2012 в 12:00
2012-06-07T12:00:13+00:00
Дополнительно
Источник
Редактировать
#16378589
startdate.setDate(startdate.getDate() - daysToSubtract);

startdate.setDate(startdate.getDate() + daysToAdd);
14
0
T.J. Crowder
T.J. Crowder
7-го июня 2012 в 12:04
2012-06-07T12:04:42+00:00
Дополнительно
Источник
Редактировать
#16378592

Объект в 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, который поможет с разбора, делать дата математика, форматирование...

7
0
 yogi
yogi
7-го июня 2012 в 12:02
2012-06-07T12:02:23+00:00
Дополнительно
Источник
Редактировать
#16378591

Может быть, это может помочь

    <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);" />
4
0
 thetallone
thetallone
19-го ноября 2012 в 4:16
2012-11-19T16:16:41+00:00
Дополнительно
Источник
Редактировать
#16378594
//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);
});

вы можете попробовать здесь:

 qant
qant
Редактировал ответ 18-го октября 2013 в 5:11
4
0
 benvds
benvds
7-го июня 2012 в 12:12
2012-06-07T12:12:05+00:00
Дополнительно
Источник
Редактировать
#16378593

Работа с датами в JavaScript-это всегда немного хлопот. Я всегда в конечном итоге с помощью библиотеки. Moment.js и XDate оба отличные:

http://momentjs.com/

http://arshaw.com/xdate/

Скрипка:

var $output = $('#output'),
    tomorrow = moment().add('days', 1);

$('<pre />').appendTo($output).text(tomorrow);

tomorrow = new XDate().addDays(-1);

$('<pre />').appendTo($output).text(tomorrow);
3
0
Jake Rowsell
Jake Rowsell
18-го марта 2015 в 11:05
2015-03-18T11:05:00+00:00
Дополнительно
Источник
Редактировать
#16378597

Как мне нравится, если у вас есть объект 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 в формате миллисекунд.

2
0
 Logard
Logard
7-го июня 2012 в 11:59
2012-06-07T11:59:51+00:00
Дополнительно
Источник
Редактировать
#16378588

Для отслеживания дат вы можете использовать родной объект javascript Date. Он покажет вам текущую дату, позволит отслеживать специфические для календаря вещи и даже поможет вам управлять различными часовыми поясами. Вы можете добавлять и вычитать дни/часы/секунды, чтобы изменить дату, с которой вы работаете, или вычислить новые даты.

Чтобы узнать больше, взгляните на эту справку об объекте:

Дата

Надеюсь, это поможет!

1
0
 rozsypal
rozsypal
13-го января 2013 в 10:21
2013-01-13T10:21:00+00:00
Дополнительно
Источник
Редактировать
#16378595

Все эти функции для добавления даты неверны. Вы передаете неправильный месяц до даты. Более подробную информацию о проблеме : http://www.domdigger.com/blog/?p=9

1
0
Suparna Gharpure
Suparna Gharpure
21-го ноября 2017 в 10:37
2017-11-21T10:37:59+00:00
Дополнительно
Источник
Редактировать
#16378599
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 подход.

1
0
Matthew  Steven Monkan
Matthew Steven Monkan
24-го декабря 2018 в 2:29
2018-12-24T14:29:17+00:00
Дополнительно
Источник
Редактировать
#16378600

Лучшее свидание утилиты я'используется ve-это дату-ФНС по нескольким причинам:

  • Использует родной JavaScript формат даты.
  • Неизменяемые; построена с использованием чистых функций и всегда возвращает новую дату экземпляре вместо изменения прошли один.
  • Модульный; импортировать только нужные вам функции.

Менеджер пакетов:

в "дата-ФНС" и: " у^1.30.1"в

Код:

импорт { addDays, subDays } с 'дата-ФНС'`

let today = new Date()
let yesterday = subDays(today, 1)
let tomorrow = addDays(today, 1)

Простой и удивительный.

0
0
Анонимный пользователь
2-го марта 2016 в 3:13
2016-03-02T15:13:45+00:00
Дополнительно
Источник
Редактировать
#16378598

Что-то я использую (требуется библиотека 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);
});

jsfiddle

0
0
Похожие сообщества 14
JavaScript Jobs — чат
JavaScript Jobs — чат
26 405 пользователей
JavaScript Jobs — чат для поиска работы и людей Правила оформления: @telegram-ru/r1WQe5F1m" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru
Открыть telegram
JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
9 515 пользователей
Помогаем друг другу разбираться с JS Правила: @js_noobs_ru/rules" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@js_noobs_ru/rules Другие полезные чаты — https://github.com/goq/telegram-list или https://rudevs.network/ByKT2JwWQ
Открыть telegram
JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
7 714 пользователей
Рекомендуем сразу отключить уведомления Правила: https://git.io/JycBd См. также: @js_noobs_ru, @nodejs_ru, @ts_cool, @react_js, @electron_cool Вакансии и поиск работы: @javascript_jobs
Открыть telegram
JavaScript.Ninja
JavaScript.Ninja
3 822 пользователей
Правила поведения проекта https://telegra.ph/Kodeks-povedeniya-proekta-JavaScriptNinja-12-15
Открыть telegram
pro.js
pro.js
3 724 пользователей
Сообщество веб (и javascript) разработчиков Чат для начинающих: @js_lib ⚠️ Вакансии - раз в неделю с вилкой зп ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌Варез По всем вопросам: @igorz Зам: @slavik4
Открыть telegram
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
2 919 пользователей
Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Библиотека верстальщика: @weblibrary Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @bigmarketolog Автор: @M_Boroda
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Денис Васьков
Зарегистрирован 17 часов назад
2
Dima Patrushev
Зарегистрирован 2 дня назад
3
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
4
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
5
Иван Степанюк
Зарегистрирован 1 неделю назад
DE
ES
ID
JA
KO
RU
TR
ZH
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией