1

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

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

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

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

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

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

有谁能够帮助我?如果你需要我,我可以澄清...

4

3 回答 3

3

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 后执行以下操作:

weekDay -= 1;
if(weekDay < 0) {
    weekDay += 7;
}
于 2012-01-01T07:36:12.760 回答
0

我认为,与在 JavaScipt 中添加日期一样,我的“DateExtensions”库做得很好。你可以在这里得到它:

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

引用后,您可以调用“add()”作为任何有效日期的方法,并将其传递给许多日期部分(秒、分钟、天、小时等)中的任何一个。因此,假设“curDate”是一个有效的 JavaScript 日期对象,您可以像这样添加 5 天:

newDate = curDate.add(5, "天");

使用负值将减去:

newDate = curDate.add(-5, "天");

一旦你得到你想要的日期,你可以使用库的 dateFormat() 方法来显示它,如下所示:

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

链接上有完整的文档。

星期几的整数值

至于获得你想要的整数值,它实际上看起来更容易(而且你不需要“如果”只是一些数学)。日期的 getDay() 方法返回星期几,星期日为“0”,星期六为“6”。因此,从星期日开始的一周通常是:

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

首先,你想扭转这种规模。这很容易通过减法来完成,方法是从值中取 7(到集合的成员总数)。这给了你这个比例:

-7,-6,-5,-4,-3,-2,-1

我们越来越近了。您也希望第一个值为零。最简单的方法(我认为)是通过成员总数获取值的模数(余数)。所有这一切基本上都是使“-7”为零,剩下的就不用管了,给我们这个:

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

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

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

对于所有的谈话,实际代码非常紧凑:

数学.abs((cnt-7)%7)

将其包装到原始示例中会给我们:

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

服务器与客户端

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

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

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

您还可以创建一个返回当前服务器时间的 Web 服务,但与传递的数据相比,客户端开销是疯狂的。

如果服务器不是您的(并且您无法让所有者提供上述内容),那么唯一真正可能的选择是直接进行 http 调用并检查 HTTP“日期”标头。然而,与回报相比,这方面的开销也是巨大的,但这确实是唯一的方法。任何像这样的系统都必须非常灵活,但是因为任何特定的服务器可能不会返回日期标头或可能无法正确返回它。

即使它确实有效,您可能仍然无法获得“服务器”时间 - 或者至少不是您想要的服务器。例如,在分层架构中,应用程序服务器可能会渲染页面并将其交给 Web 服务器以返回 - 您将获得 Web 服务器时间,而不是应用程序服务器。任意数量的设备也可能重写标头(例如,通常使用专用的 SSL 设备来卸载所有加密工作 - 这些通常会自己重写标头)。

抱歉,技术性太强了——JavaScript 无疑是一个很遗憾很少有“简单问题”的领域。;^)

祝你好运!

于 2012-01-01T08:56:11.550 回答
0
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()
)
于 2012-01-01T09:57:56.263 回答