JavaScript添加日期函数

JavaScript Addition Date Functions

本文关键字:函数 日期 添加 JavaScript      更新时间:2023-09-26

我真的不太了解核心JavaScript,只是一点jQuery。但是我知道jQuery对于我这里所需要的不是必需的:

我想使用getdate函数来查找服务器的星期几。然后添加一堆子句,如:

  • 如果是星期一,则在日期上加6,并以MM/DD/YYYY格式返回日期。
  • 如果是星期二,日期加5,返回MM/DD/YYYY格式的日期。
  • 如果是星期三,则在日期上加4,并以MM/DD/YYYY格式返回日期。

以此类推,直到周日,它将添加0。

假设今天是星期一,它将返回1/8/2012在实际日期中,今天是星期天所以它会返回1/1/2012

然后我只想调用一个document.write函数来写它返回到我的HTML文档中的MM/DD/YYYY。

有人能帮我吗?我可以澄清如果你需要我…

getDay()返回星期几,星期日= 0,星期一= 1,等等。

假设今天是星期一,getDay()将返回1,这意味着daysToAdd将是5。

一旦我们知道我们想要添加多少天,我们就可以创建一个新的日期并添加这些天。我们通过获取以毫秒为单位的今天,然后加上以毫秒为单位的天数(daysToAdd)来实现这一点。

我们用24*60*60*1000(即一天中的毫秒数)将天转换为毫秒。

我将月加1,因为JavaScript返回基于0的月,但出于显示目的,我们希望将其格式化,以便例如一月是1而不是零。

function getEndOfWeek() {
    var today = new Date();
    var weekDay = today.getDay();
    // if you want the week to start on Monday instead of Sunday uncomment the code below
    //weekDay -= 1;
    //if(weekDay < 0) {
    //    weekDay += 7;
    //}
    var daysToAdd = 6 - weekDay;
    var newDate = new Date(today.getTime() + daysToAdd *24*60*60*1000);
    var month = newDate.getMonth() + 1;
    var day = newDate.getDate();
    var year = newDate.getFullYear();
    var formatedDate = month + "/" + day + "/" + year;
    return formatedDate;
}

你可以在你的代码中这样实现,JavaScript:

$(function() {
    $("#TheDate").html(getEndOfWeek());
});

你的HTML应该是这样的:

The week ends on <span id="TheDate"></span>.

可以在这里找到jsFiddle: jsFiddle

如果您想调整工作日,以便将星期一作为一周的开始,而不是星期日,您可以在获得工作日后执行以下操作:

weekDay -= 1;
if(weekDay < 0) {
    weekDay += 7;
}
var day = 1000*60*60*24
, nextSunday = new Date(+new Date() + day*(7-((0|(+new Date()/day)%7-3)||7)));
alert(
    (101+nextSunday.getMonth()).toString().substr(1) + '/' +
    (100+nextSunday.getDate()).toString().substr(1) + '/' +
    nextSunday.getFullYear()
)

至于在javascript中添加日期,我认为我的"DateExtensions"库做得很好。你可以在这里下载:

http://depressedpress.com/javascript-extensions/dp_dateextensions/

一旦被引用,你可以调用"add()"作为任何有效日期的方法,并传递给它任何日期部分(秒,分钟,天,小时等)。假设"curDate"是一个有效的JavaScript日期对象你可以像这样添加5天:

newDate = curDate。添加(5天),

使用负值将减去:

newDate = curDate。添加(5天);

一旦你得到了你想要的日期,你可以使用库的dateFormat()方法来显示它,像这样:

curDate.dateFormat("MM/DD/YYYY");

链接有完整的文档。

星期的整数值

至于获得您想要的整数值,实际上比看起来更容易(并且您不需要"if",只需要一些数学运算)。date的getDay()方法返回星期几,其中星期日为"0",星期六为"6"。因此,从周日开始的一周,通常是:

0, 1, 2, 3, 4, 5, 6

首先,您想要反转该比例。这很容易通过减法完成,即从值中减去7(集合中成员的总数)。它给出了这个刻度:

7、6、5、4、3、2、1

我们越来越近了。你希望第一个值也是0。最简单的方法(我认为)是通过成员总数获得值的模数(余数)。所有这些基本上都是让"-7"为零,其余部分保持不变,给我们这个:

0、6、5、4、3、2、1

差不多做完了。最后,您不想要负数,因此您需要使用Math.abs()方法消除符号(获得绝对值),使我们得到所需的结果:

0、6、5、4、3、2、1

尽管说了这么多,实际的代码还是很紧凑的:

Math.abs ((cnt-7) % 7)

将其封装到原始示例中得到:

newDate = curDate.add (Math.abs (curDate.getDay() 7) % 7),"天"),

服务器Vs客户端

但是,请记住nnnnnn的评论:在JavaScript中,getDate()函数获取它正在运行的机器的当前日期/时间-在网页是客户端而不是服务器的情况下。

如果你真的是指客户给他们计时,那你就搞定了。但是,如果您确实需要服务器时间,那么这几乎是不可能的。如果你拥有服务器,那么设置一个规则将当前服务器包含在每个已完成请求的cookie中并不难(然后你可以使用我的cookie库,也在上面的站点上,访问信息!)

它更混乱,但取决于服务器,您也可以创建一个老式的服务器端包含,向每个页面添加一点JavaScript(最好在头中标记替换),将日期硬编码为全局变量。

你也可以创建一个返回当前服务器时间的web服务,但是与正在交付的数据相比,客户端开销是疯狂的。

如果服务器不是你的(你不能让所有者提供以上),那么唯一真正潜在的选择是做一个直接的http调用并检查http"日期"头。然而,与回报相比,这方面的开销是巨大的,但这确实是唯一的方法。任何这样的系统都必须非常灵活,因为任何特定的服务器都可能不返回日期头或不正确返回日期头。

即使它可以工作,也要明白您可能仍然没有获得"服务器"时间-或者至少不是您想要的服务器。在分层架构中,例如,应用服务器可能会渲染页面并将其交给web服务器返回-您将获得web服务器的时间,而不是应用服务器。任意数量的设备也可能重写报头(例如,通常使用专用SSL设备来卸载所有加密工作-这些设备通常会重写报头本身)。

很抱歉我说得太技术化了——JavaScript绝对是一个很少有"简单问题"的领域。, ^)

祝你好运!