首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在JavaScript中计算日期

在JavaScript中计算日期
EN

Stack Overflow用户
提问于 2011-01-27 10:37:13
回答 4查看 5K关注 0票数 1

我目前正在寻找在JavaScript中计算一个自定义日期,我的头开始痛苦地想着它。我有一个倒计时时钟,每隔一个星期二下午12点开始。我有倒计时功能正常使用基思·伍德的jQuery倒计时插件,但需要帮助计算每月每隔一个星期二,并在这一天重置它。

我们将一如既往地感谢您的帮助。

Thansk预告

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-27 11:21:11

我不得不做一些类似的事情(不是在JS中,但算法足够相似)

现在,在我开始之前,为了澄清,我假设这是每两周发生一次的事情,无论这个月的长度如何,而不是在第二个和第四个星期二,无论它最后一次发生的时间是什么时候,这更容易解决

选择此事件过去发生的日期(或第一次发生的日期),我们将在以下代码中将此日期称为base

代码语言:javascript
运行
复制
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
}

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

代码语言:javascript
运行
复制
if( Math.floor((new Date()-new Date('date of first occurrence'))/1000/60/60/24)%14 == 0 )
    //reset/start timer
票数 1
EN

Stack Overflow用户

发布于 2016-11-03 18:33:07

请找到附件中的Date Library链接,以获取自定义计算日期和时间函数。

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

代码语言:javascript
运行
复制
<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
}

您可以使用示例中给出的不同函数来获取自定义日期。

从给定日期获取季度的第一天

代码语言:javascript
运行
复制
DateLibrary.getRelativeDate(new Date("2015-06-15"),
    {operationType:"First_Date",granularityType:"Quarters"}) // Output : Wed Apr 01 2015 00:00:00

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

代码语言:javascript
运行
复制
DateLibrary.getRelativeDate(iDate,
    {operationType: "Date_of_Weekday_in_Week",
        startDayOfWeek:"Sunday",returnDayOfWeek:"Wednesday"}) // Output : Wed Jun 17 2015 00:00:00

如果一周的第一天是星期五,日期是包含2015年6月15日的第三季度第二个月第三周的第三周的星期二。

代码语言:javascript
运行
复制
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日作为日期之一。

代码语言:javascript
运行
复制
 DateLibrary.getWeekNumber(new Date("2015-06-15"),
    {operationType:"Week_of_Year",
        startDayOfWeek:"Tuesday"}) // Output : 24

还可以使用日期差异函数

代码语言:javascript
运行
复制
 DateLibrary.getDateDifference(new Date("2016-04-01"),new Date("2016-04-16"),
    {granularityType: "days"}) //output 15

用于将数字转换为时间的函数

代码语言:javascript
运行
复制
DateLibrary.getNumberToTimeStr("345", {delimiter: ":"}) //output 00:03:45

它还支持Julian日期转换

代码语言:javascript
运行
复制
 DateLibrary.julianToDate("102536") //output Fri Jun 20 2003 00:00:00
票数 1
EN

Stack Overflow用户

发布于 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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4812152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档