如何使用 javascript 添加迄今为止的周数?

How to add weeks to date using javascript?

提问人:Jammer 提问时间:7/5/2012 最后编辑:Coral DoeJammer 更新时间:8/30/2022 访问量:103191

问:

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;

}
javascript 日期格式

评论

0赞 oCcSking 3/2/2016
我喜欢那个

答:

7赞 Matt 7/5/2012 #1

你要分配一个 Date 对象,该对象表示你传递它的字符串。您在值中看到的是日期对象的表示形式(尝试查看此内容)。date1acceptLicensetoString()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日期的字符串”。(看这里)。dateDate

var segments = acceptCompletionDate.split("/");
var date1 = new Date(segments[2], segments[1], segments[0]);

评论

0赞 Jammer 7/5/2012
感谢您的回复,如果我选择“04/01/2012”(dd/mm/yyyy),我在另一个字段中得到的值是“15/4/2012”(dd/mm/yyyy),所以它似乎仍然在月份而不是日期上添加 14,或者更有可能的是格式仍然在某处错误。
0赞 Jammer 7/5/2012
我想在添加 14 天之前需要以某种方式格式化?因为 (date1.getDate() + 14) 假定其格式为 mm/dd/yyyy
0赞 Matt 7/5/2012
@JBoom:参数应该是“表示RFC2822或 ISO 8601 日期的字符串”。(看这里)。最好使用另一个接受年、月、日作为单独参数的构造函数(请参阅我编辑的答案)。Date
0赞 Jammer 7/5/2012
谢谢马特,格式很好,但现在在月份添加 1 会搞砸它,即使它是否添加一个!
0赞 Toast 7/5/2012 #2

这应该可以满足您的要求。

function LicenceToOccupy(acceptCompletionDate)
{
    var date1 = new Date(acceptCompletionDate);
    date1.setDate(date1.getDate() + 14);
    document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
}
157赞 Arvind Sridharan 7/5/2012 #3

你可以这样做:

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 对象相对于当前设置月份的月初的日期。

-1赞 Ricola3D 7/5/2012 #4
 date1.toLocaleDateString() 

这将在客户端约定中以字符串的形式返回 date1

要创建多 2 周(2 周 = 272460 60秒)的新日期 date2,请执行以下操作:

 var date2 = new Date(date1 + 60*60*24*7*2);

评论

0赞 RobG 10/30/2012
这是 toLocaleDateString 应该做的,但它并非在所有浏览器中都这样做(例如,Chrome 会忽略我的系统设置,Firefox 的最新版本也是如此,但不是当前版本)。
0赞 Me.Name 7/5/2012 #5

要解析特定格式并用 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

}
12赞 Luis 11/10/2018 #6

这本身可能无法回答问题,但可以通过这些公式找到解决方案。

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 周的日期对象

评论

0赞 mtkopone 5/21/2020
以毫秒为单位的一周不是.如果使用此方法,也要警惕 DST。6.04e+86.048e+8