我认为,与在 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 无疑是一个很遗憾很少有“简单问题”的领域。;^)
祝你好运!