Функции добавления даты в JavaScript - PullRequest
1 голос
/ 01 января 2012

Я не слишком много знаю о ядре JavaScript, просто точка jQuery.Но я знаю, что jQuery не нужен для того, что мне нужно здесь:

Я хочу использовать функцию getdate, чтобы узнать день недели на сервере.Затем добавьте несколько предложений, таких как:

  • , если в понедельник добавьте 6 к дате и верните дату в форме MM / DD / YYYY.
  • , если во вторник добавьте 5 к дате и верните дату в форме MM / DD / YYYY.
  • если в среду добавить 4 к дате и вернуть дату в форме MM / DD / YYYY.

и так далее до воскресенья, когда он добавит 0.

Итак, скажем, сегодня понедельник, он вернется 1/8/2012 А в реальных датах сегодня воскресенье, так что это действительноreturn 1/1/2012

Тогда я просто хочу вызвать функцию document.write для записи MM / DD / YYYY, которую она возвращает в мой HTML-документ.

Кто-нибудь может мне помочь?Я могу уточнить, если я тебе понадоблюсь ...

Ответы [ 3 ]

3 голосов
/ 01 января 2012

getDay () возвращает день недели, воскресенье = 0, понедельник = 1 и т. Д. И т. Д.

Так, скажем, сегодня был понедельник, getDay () вернул бы 1, что означает, что daysToAdd был бы равен 5.

Как только мы узнаем, сколько дней мы хотим добавить, мы можем создать новую дату и добавить эти дни.Мы делаем это, получая сегодняшний день в миллисекундах, а затем добавляя количество дней (daysToAdd) в миллисекундах.

Мы конвертируем дни в миллисекунды, умножая их на 24 * 60 * 60 * 1000, то есть число миллисекунд вдень.

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

function getEndOfWeek() {
    var today = new Date();
    var weekDay = today.getDay();
    // if you want the week to start on Monday instead of Sunday uncomment the code below
    //weekDay -= 1;
    //if(weekDay < 0) {
    //    weekDay += 7;
    //}
    var daysToAdd = 6 - weekDay;
    var newDate = new Date(today.getTime() + daysToAdd *24*60*60*1000);
    var month = newDate.getMonth() + 1;
    var day = newDate.getDate();
    var year = newDate.getFullYear();
    var formatedDate = month + "/" + day + "/" + year;
    return formatedDate;
}

Выможет реализовать в вашем коде, например, JavaScript:

$(function() {
    $("#TheDate").html(getEndOfWeek());
});

Ваш HTML будет выглядеть примерно так:

The week ends on <span id="TheDate"></span>.

Вы можете найти jsFiddle здесь: jsFiddle

Если вы хотите настроить день недели так, чтобы считать понедельник началом недели вместо воскресенья, вы можете сделать следующее после получения дня недели:

weekDay -= 1;
if(weekDay < 0) {
    weekDay += 7;
}
0 голосов
/ 01 января 2012
var day = 1000*60*60*24
, nextSunday = new Date(+new Date() + day*(7-((0|(+new Date()/day)%7-3)||7)));

alert(
    (101+nextSunday.getMonth()).toString().substr(1) + '/' +
    (100+nextSunday.getDate()).toString().substr(1) + '/' +
    nextSunday.getFullYear()
)
0 голосов
/ 01 января 2012

Так же, как добавление дат в JavaScipt, моя библиотека DateExtensions делает это достаточно хорошо, я думаю.Вы можете получить его здесь:

http://depressedpress.com/javascript-extensions/dp_dateextensions/

После повторного вызова вы можете вызвать "add ()" в качестве метода для любой действительной даты и передать его любой из многих частей даты (секунды, минуты)., дни, часы и т. д.).Таким образом, предполагая, что "curDate" является допустимым объектом даты в JavaScript, вы можете добавить 5 дней, например:

newDate = curDate.add (5, "days");

Использование отрицательного значения вычтет:

newDate = curDate.add (-5, "дни");

Получив нужную дату, вы можете использовать метод dateFormat () библиотеки, чтобы отобразить ее следующим образом:

curDate.dateFormat ("MM / DD / YYYY");

По ссылке имеется полная документация.

Целочисленные значения для дня недели

Что касается получения целочисленного значения, которое вы хотите, на самом деле это проще, чем выглядит(и вам не нужно "если" только немного математики).Метод getDay () возвращает день недели с воскресеньем «0» и субботой «6».Таким образом, неделя, начиная с воскресенья, обычно составляет:

0,1,2,3,4,5,6

Сначала вы хотите изменить эту шкалу на противоположную.Это легко сделать с помощью вычитания, взяв 7 (от общего числа членов набора) из значения.Это дает вам шкалу:

-7, -6, -5, -4, -3, -2, -1

Мы приближаемся.Вы также хотите, чтобы первое значение было равно нулю.Самый простой способ (я думаю) сделать это - получить модуль (остаток) значения по общему количеству членов.Все, что в основном делает, это превращает «-7» в ноль, а остальные оставляют в покое, давая нам следующее:

0, -6, -5, -4, -3, -2, -1

Почти готово.Наконец, вам не нужны отрицательные числа, поэтому вам нужно использовать метод Math.abs (), чтобы убрать знак (получить абсолютное значение), оставив нам желаемый результат:

0,6,5,4, 3,2,1

Несмотря на все разговоры, резкий код довольно компактен:

Math.abs ((cnt-7)% 7)

Заключение висходный пример дает нам:

newDate = curDate.add (Math.abs ((curDate.getDay () - 7)% 7), "days");

ServerVs Client

Однако примите комментарий nnnnnn близко к сердцу: в JavaScript функция getDate () получает текущую дату / время машины, на которой она работает - в случае веб-страницы, которая является клиентом,не сервер.

Если вы на самом деле имели в виду время клиента, то все готово.Если вам действительно нужно время сервера, однако, это раздражает до невозможности.Если вы владеете сервером, то на самом деле не сложно установить правило, включающее текущий сервер в файл cookie, в который входит каждый выполненный запрос (вы можете использовать мою библиотеку файлов cookie, также на сайте выше, для доступа к информации!)

Это сложнее, но в зависимости от сервера вы также можете создать серверное включение старой школы, добавляющее немного JavaScript на каждую страницу (предпочтительно в виде отмеченной замены в заголовке), которая жестко кодируетдата как глобальная переменная.

Вы также можете создать веб-службу, которая возвращает текущее время сервера, но накладные расходы клиента для него являются безумными по сравнению с доставляемыми данными.

Еслисервер НЕ ваш (и вы не можете заставить владельца предоставить вышеупомянутое), тогда единственный реальный потенциальный вариант - это прямой HTTP-вызов и проверка HTTP-заголовка «Date».Опять же, однако, накладные расходы на это огромны по сравнению с возвращением, но это действительно единственный способ.Однако любая подобная система должна быть очень гибкой, поскольку любой конкретный сервер может не возвращать заголовок даты или может возвращать его неправильно.

Даже если это работает, поймите, что вы все еще не получаете «серверное» время - или, по крайней мере, не тот сервер, который вам нужен.Например, в многоуровневой архитектуре сервер приложений может отображать страницу и передавать ее на веб-сервер для возврата - вы получите время веб-сервера, а не сервер приложений.Любое количество устройств может также переписать заголовки (например, обычно используют выделенные устройства SSL для разгрузки всей работы по шифрованию - они часто перезаписывают сами заголовки).

Извините, что слишком технически - JavaScript - этобезусловно, одна область, где, к сожалению, редко возникает «простой вопрос».; ^)

Удачи!

...