我不太了解核心JavaScript,只是一个jQuery点。但我知道jQuery对于我需要的东西不是必需的:
我想使用getdate函数查找服务器的一周中的某一天。然后添加一些子句,如:
依此类推,直到星期天才会加0。
所以,让我们今天星期一说,它将在2012年1月8日返回 并且在今天的实际日期周日,所以它将真正返回2012年1月1日
然后我只想调用一个document.write
函数来编写它返回到我的HTML文档中的MM / DD / YYYY。
任何人都可以帮助我吗?我可以澄清你是否需要我......
答案 0 :(得分:3)
getDay()返回星期几,星期日= 0,星期一= 1等等。
所以说今天是星期一getDay()将返回1,这意味着daysToAdd将是5。
一旦我们知道要添加多少天,我们就可以创建新日期并添加这些日期。我们这样做是通过今天以毫秒为单位,然后以毫秒为单位添加天数(daysToAdd)。
我们将天数乘以24 * 60 * 60 * 1000(即一天中的毫秒数),将天数转换为毫秒数。
我在月份中添加1,因为JavaScript基于月份返回0,但出于显示目的,我们要格式化它,以便1月例如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;
}
答案 1 :(得分:0)
就像在JavaScipt中添加日期一样,我的“DateExtensions”库做得很好,我想。你可以在这里得到它:
http://depressedpress.com/javascript-extensions/dp_dateextensions/
一旦重新启用,您可以将“add()”称为任何有效日期的方法,并将其传递给许多日期部分(第二,分钟,天,小时等)中的任何一个。因此,假设“curDate”是一个有效的JavaScript日期对象,您可以像这样添加5天:
newDate = curDate.add(5,“days”);
使用负值将减去:
newDate = curDate.add(-5,“days”);
获得所需日期后,您可以使用库的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
我们越来越近了。您希望第一个值也为零。最简单的方法(我认为)这样做是为了得到值的模数(余数)乘以成员总数。所有这一切基本上都是将“-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),“days”);
服务器与客户端
然而,请将nnnnnn的评论铭记于心:在JavaScript中,getDate()函数获取正在运行的机器的当前日期/时间 - 如果是网页,则是客户端,而不是服务器。
如果你实际上是指客户计时,那么你已经完成了设置。如果你确实需要服务器时间,那就太烦人了。如果您拥有服务器,那么实际上并不难设置包含每个已完成请求的cookie中当前服务器的规则(您可以使用我的cookie库,也可以在上面的站点访问该信息!)< / p>
它比较麻烦,但根据服务器的不同,您可能还可以创建一个老式的服务器端包含,为每个页面添加一些JavaScript(最好是标题中的标记替换),对日期进行硬编码作为一个全局变量。
您也可以创建一个返回当前服务器时间的Web服务,但与正在传递的数据相比,客户端开销是疯狂的。
如果服务器不是您的(并且您无法让所有者提供上述内容),那么唯一真正的潜在选择是进行直接的http调用并检查HTTP“Date”标头。然而,与返回相比,这方面的开销是巨大的,但它确实是唯一的方法。这样的任何系统都必须非常灵活,因为任何特定的服务器可能都不会返回日期标题或者可能无法正确返回它。
即使它确实有用,也要了解您可能仍然没有获得“服务器”时间 - 或者至少不是您想要的服务器。在分层体系结构中,例如,应用程序服务器可能会呈现页面并将其交给Web服务器返回 - 您将获得Web服务器时间,而不是应用程序服务器。任何数量的设备也可能会重写标头(例如,通常使用专用的SSL设备卸载所有加密工作 - 这些通常会重新编写标头)。
很抱歉过于技术性 - JavaScript绝对是一个很遗憾很少出现“简单问题”的领域。 ; ^)
祝你好运!
答案 2 :(得分: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()
)