在JavaScript中计算日期

我目前正在寻找用JavaScript计算自定义日期,我的脑袋开始在思考它。 我有一个倒计时钟,每隔一个星期二中午12点开始。 我使用Keith Wood的jQuery倒计时插件正常运行倒计时function,但需要协助计算每个月的其他星期二并在当天重置它。

一如既往地非常感谢所有帮助。

Thansk提前

我必须做类似的事情(不是在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 //ie 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 } 

或代码高尔夫风格的版本:

 if( Math.floor((new Date()-new Date('date of first occurrence'))/1000/60/60/24)%14 == 0 ) //reset/start timer 

请查找日期库的附加链接以获取自定义计算日期和时间函数。

要在客户端使用它,请下载index.js和assertHelper.js并将其包含在HTML中。

   $( 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 

如果一周的第一天是星期日,那么星期三的日期是,如果给定的日期是2015年6月15日

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

如果一周的第一天是星期五,那么将包含2015年6月15日的第3季度的第3个星期二的星期二作为日期之一。

 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 

如果一周的第一天是星期二,那么将在2015年6月15日作为日期之一的一年中的哪一周。

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

还有日期差异function

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

将数字转换为Timestr的function

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

它还支持Julian日期转换

  DateLibrary.julianToDate("102536") //output Fri Jun 20 2003 00:00:00 

RFC 2445重复规则的JavaScript实现: http : //code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/demos/calendar/rrule-cajita.js这需要同一目录中的一些文件。 有关其工作原理的示例,请参阅unit testing( 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这意味着星期二每周(因为间隔)周(由于频率)(因为白天)。

看看date.js库。 它有几个日期解析帮助程序,包括Date.today().next().tuesday() (以及其他)。