Расчет даты в JavaScript - PullRequest
       6

Расчет даты в JavaScript

1 голос
/ 27 января 2011

В настоящее время я рассчитываю вычислить пользовательскую дату в JavaScript, и моя голова начинает болеть, думая об этом.У меня есть часы обратного отсчета, которые должны начинаться каждый вторник в 12 часов дня.У меня есть функция обратного отсчета, работающая должным образом с помощью плагина отсчета jQuery от Кейта Вуда, но мне нужна помощь в расчете каждый второй вторник месяца и ее сброс в этот день.

Как всегда, вся помощь очень ценится.*

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 03 ноября 2016

Пожалуйста, найдите прикрепленную ссылку для Библиотека дат , чтобы получить пользовательские функции расчета даты и времени.

Чтобы использовать его на стороне клиента, загрузите index.js и assertHelper.js и включите его в свой HTML.

<script src="assertHelper.js"></script>
<script type="text/javascript" src="index.js"></script>
$( document ).ready(function() {
    DateLibrary.getDayOfWeek(new Date("2015-06-15"),{operationType:"Day_of_Week"}); // Output : Monday
}

Вы можете использовать различные функции, указанные в примерах, для получения пользовательских дат.

Чтобы получить первый день квартала от указанной даты

DateLibrary.getRelativeDate(new Date("2015-06-15"),
    {operationType:"First_Date",granularityType:"Quarters"}) // Output : Wed Apr 01 2015 00:00:00

Если первый день недели - воскресенье, то какая дата будет в среду, если указанная дата 15 июня 2015 года

DateLibrary.getRelativeDate(iDate,
    {operationType: "Date_of_Weekday_in_Week",
        startDayOfWeek:"Sunday",returnDayOfWeek:"Wednesday"}) // Output : Wed Jun 17 2015 00:00:00

Если первый день недели - пятница, то какая дата будет во вторник 3-го Неделя 2-го месяца 3-го квартала года, содержащая 15 июня 2015 года как одна из дат.

DateLibrary.getRelativeDate(new Date("2015-06-15"),
    {operationType: "Date_of_Weekday_in_Year_for_Given_Quarter_and_Month_and_Week",
        startDayOfWeek:"Friday",returnDayOfWeek:"Tuesday", QuarterOfYear:3, MonthOfQuarter:2, WeekOfMonth:3}) // Output : 18th Aug 2015

Если первым днем ​​недели является вторник, то каким будет номер недели в году следовать 15 июня 2015 года в качестве одной из дат.

 DateLibrary.getWeekNumber(new Date("2015-06-15"),
    {operationType:"Week_of_Year",
        startDayOfWeek:"Tuesday"}) // Output : 24

Доступны также функции «Разница дат»

 DateLibrary.getDateDifference(new Date("2016-04-01"),new Date("2016-04-16"),
    {granularityType: "days"}) //output 15

Функция для преобразования номера в Timestr

DateLibrary.getNumberToTimeStr("345", {delimiter: ":"}) //output 00:03:45

Он также поддерживает юлианское преобразование даты

 DateLibrary.julianToDate("102536") //output Fri Jun 20 2003 00:00:00
1 голос
/ 27 января 2011

Мне пришлось сделать что-то подобное (не в JS, но алгоритм достаточно похож)

Теперь, прежде чем я начну, чтобы уточнить, я предполагаю, что это то, что происходит каждые две недели, независимо от длинымесяца, а не во второй и четвертый вторник независимо от того, когда это произошло в последний раз, что проще решить

Укажите дату в прошлом, когда произошло это событие (илидата первого вхождения), мы назовем эту дату base в следующем коде

var base=new Date('date of first occurrence');
var one_day=1000*60*60*24; //length of day in ms

// assume we care about if the countdown should start today 
// this may be different if you are building a calendar etc.
var date_to_check=new Date();

var diff_in_days=math.floor(date_to_check-base)/one_day);
var days_since_last_reset= diff_in_days%14;
if(days_since_last_reset == 0){
    //date_to_check is the same day in the fortnightly cycle as base
    //i.e. today at some point is when you'll want to show the timer
    //If you only want to show the timer between certain times,
    //add another check here
}else{
    //next reset in (14 - days_since_last_reset) days from date_to_check
}

или в версии с кодом code-golf-esque:

if( Math.floor((new Date()-new Date('date of first occurrence'))/1000/60/60/24)%14 == 0 )
    //reset/start timer
0 голосов
/ 27 января 2011

Посмотрите библиотеку date.js . У него есть несколько помощников для разбора даты, включая Date.today().next().tuesday() (среди прочих).

0 голосов
/ 27 января 2011

Существует реализация правил повторения RFC 2445 на JavaScript: http://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/demos/calendar/rrule-cajita.js, для которой требуется несколько файлов в одном каталоге.См. Модульный тест (http://code.google.com/p/google-caja/source/browse/trunk/tests/com/google/caja/demos/calendar/rrule_test.js) для примеров того, как он работает.

Попробуйте использовать его для анализа RRULE: FREQ = WEEKLY; BYDAY = TU; INTERVAL = 2, что означает каждую секунду (из-заинтервал) неделя (из-за частоты) во вторник (из-за дня).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...