我目前正在寻找在JavaScript中计算一个自定义日期,我的头开始痛苦地想着它。我有一个倒计时时钟,每隔一个星期二下午12点开始。我有倒计时功能正常使用基思·伍德的jQuery倒计时插件,但需要帮助计算每月每隔一个星期二,并在这一天重置它。
我们将一如既往地感谢您的帮助。
Thansk预告
发布于 2011-01-27 11:21:11
我不得不做一些类似的事情(不是在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
发布于 2016-11-03 18:33:07
请找到附件中的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
如果一周的第一天是星期日,那么星期三是什么日期?如果给定的日期是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日的第三季度第二个月第三周的第三周的星期二。
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
用于将数字转换为时间的函数
DateLibrary.getNumberToTimeStr("345", {delimiter: ":"}) //output 00:03:45
它还支持Julian日期转换
DateLibrary.julianToDate("102536") //output Fri Jun 20 2003 00:00:00
发布于 2011-01-27 12:10:00
有一个RFC2445重复规则的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,这意味着每隔一秒(由于间隔)、每周(由于频率)在周二(由于byday)。
https://stackoverflow.com/questions/4812152
复制相似问题