2011-01-27 109 views
1

我目前正在计算JavaScript中的一个自定义日期,我的脑袋开始伤害它的思考。我有一个倒数计时钟,是在星期二下午12点开始的。使用Keith Wood的jQuery倒计时插件,我可以正常使用倒计时功能,但在计算每月的其他星期二并在当天重置时需要帮助。在JavaScript中计算日期

所有帮助一如既往地受到高度赞赏。

Thansk提前

+3

什么代码,你到目前为止? – qwertymk 2011-01-27 02:41:16

+0

.getDay()函数可能有所帮助:http://www.w3schools.com/js/js_js_obj_date.asp – 2011-01-27 02:58:18

+0

hi jnolte :)请尝试发布一些代码,它可能会帮助我们更快地解决您的问题。 TNX! :) – 2011-01-27 03:16:54

回答

1

我不得不做同样的事情(不是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 
} 

,或者在代码高尔夫式的版本:

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

有一个JavaScript实现的RFC 2445的循环规则: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这意味着星期二(由于时间间隔)每周(由于间隔)星期二(由于频率)。

0

查看date.js库。它有几个日期分析助手,包括Date.today().next().tuesday()(等等)。

1

请参阅Date Library的附加链接以获取自定义计算日期和时间函数。

要使用它的客户端,请下载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天的星期二是什么日期 含有2015年6月15日的第3季度的第2个月的星期作为 日期之一。

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 

也有可用的时间差功能

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 

它还支持Julian日期转换

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