提问人:Jammer 提问时间:7/5/2012 最后编辑:Coral DoeJammer 更新时间:8/30/2022 访问量:103191
如何使用 javascript 添加迄今为止的周数?
How to add weeks to date using javascript?
问:
Javascript 绝对不是我的强项。我已经尝试了几个小时了,似乎在某个地方陷入了日期格式。
我有一个表单,用户选择了一个日期(dd/mm/yyyy),然后将获取此日期并添加 2 周,然后将日期复制到另一个表单字段。
我在下面的最新尝试甚至没有添加日期,只是将一个表单字段中的选定日期复制到另一个表单字段,如果我选择“03/02/2012”,它会输出“Fri Mar 02 2012 00:00:00 GMT+0000 (GMT Standard Time)”,因此它以美国格式输出以及完整日期。我如何让它以相同的格式输出并增加 2 周?
function LicenceToOccupy(acceptCompletionDate)
{
var date1 = new Date(acceptCompletionDate);
document.frmAccept.acceptLicence.value = date1;
}
答:
你要分配一个 Date 对象,该对象表示你传递它的字符串。您在值中看到的是日期对象的表示形式(尝试查看此内容)。date1
acceptLicense
toString()
alert(date1.toString())
若要根据需要输出,必须使用字符串串联和各种 Date
方法。
var formattedDate = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
就增加 2 周而言,您应该在当前日期上增加 14 天;
date1.setDate(date.getDate() + 14);
...这将自动处理月份增加等。
最后,你会得到;
var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14);
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
JavaScript 中的 N.B 月份索引为 0(Jan = 0,Dec = 11),因此是 on 月份。+1
编辑:为了解决您的评论,您应该按如下方式构造,因为参数应该是“表示RFC2822或ISO 8601日期的字符串”。(看这里)。date
Date
var segments = acceptCompletionDate.split("/");
var date1 = new Date(segments[2], segments[1], segments[0]);
评论
Date
这应该可以满足您的要求。
function LicenceToOccupy(acceptCompletionDate)
{
var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14);
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
}
你可以这样做:
const numWeeks = 2;
const now = new Date();
now.setDate(now.getDate() + numWeeks * 7);
或作为一个功能
const addWeeksToDate = (dateObj,numberOfWeeks) => {
dateObj.setDate(dateObj.getDate()+ numberOfWeeks * 7);
return dateObj;
}
const numberOfWeeks = 2
console.log(addWeeksToDate(new Date(), 2).toISOString());
你可以在这里看到小提琴。
根据 MDN 中的文档
setDate() 方法设置 Date 对象相对于当前设置月份的月初的日期。
date1.toLocaleDateString()
这将在客户端约定中以字符串的形式返回 date1
要创建多 2 周(2 周 = 272460 60秒)的新日期 date2,请执行以下操作:
var date2 = new Date(date1 + 60*60*24*7*2);
评论
toLocaleDateString
应该做的,但它并非在所有浏览器中都这样做(例如,Chrome 会忽略我的系统设置,Firefox 的最新版本也是如此,但不是当前版本)。
要解析特定格式并用 14 递增天数,您可以执行诸如拆分部分之类的操作,并创建具有特定给定的 y/m/d 的日期对象。(立即增加天数)提供分隔符始终是 ,以下应该有效:dd/mm/yyyy
-
function LicenceToOccupy(acceptCompletionDate)
{
var parts = acceptCompletionDate.split("/");
var date1 = new Date(parts[2], (parts[1] - 1), parseInt(parts[0]) + 14); //month 0 based, day: parse to int and increment 14 (2 weeks)
document.frmAccept.acceptLicence.value = date1.toLocaleDateString(); //if the d/m/y format is the local string, otherwise some cusom formatting needs to be done
}
这本身可能无法回答问题,但可以通过这些公式找到解决方案。
6.048e+8
= 1 周(以毫秒为单位)
Date.now()
= 现在以毫秒为单位
Date.now() + 6.048e+8
= 从今天起 1 周
Date.now() + (6.048e+8 * 2)
= 从今天起 2 周
new Date( Date.now() + (6.048e+8 * 2) )
= 从今天起 2 周的日期对象
评论
6.04e+8
6.048e+8
上一个:检查日期是否超过 6 个月
评论