与visual foxpro gomonth()等价的Javascript

与visual foxpro gomonth()等价的Javascript,javascript,visual-foxpro,Javascript,Visual Foxpro,我的任务是为用visualfoxpro编写的遗留应用程序编写一个web门户。我必须确认怀孕日期。规则是从当前日期算起不能超过9个月。我已经试着说这太模糊了,需要几天或几周的时间,但是我被告知我必须模仿遗留软件 以下是VSP中的代码的作用: maxValueForDueDate = GOMONTH(DATE() , 9) 根据GOMONTH()处理边缘情况如下: 开启世纪 将GOMONTH({^1998-02-16},5)存储到GDM截止日期 清楚的 ? GD截止日期和显示日期1998年7月16

我的任务是为用visualfoxpro编写的遗留应用程序编写一个web门户。我必须确认怀孕日期。规则是从当前日期算起不能超过9个月。我已经试着说这太模糊了,需要几天或几周的时间,但是我被告知我必须模仿遗留软件

以下是VSP中的代码的作用:

maxValueForDueDate = GOMONTH(DATE() , 9)
根据
GOMONTH()
处理边缘情况如下:

开启世纪
将GOMONTH({^1998-02-16},5)存储到GDM截止日期
清楚的
? GD截止日期和显示日期1998年7月16日
? 戈蒙斯({^1998-12-31},2)和显示器1999年2月28日
? 戈蒙斯({^1998-12-31},-2)和显示器1998年10月31日
如您所见,将2个月添加到12月31日并不会导致3月2日,不幸的是,这正是以下javascript所做的:

var dDate=新日期('1998-12-31');
dDate.setMonth(dDate.getMonth()+2);
警报(dDate.toDateString());//一九九九年三月二日(星期二)

有没有人手头有他们为这个场景编写的javascript函数?我在谷歌上搜索了一下,但没有找到我需要的东西。我的第三方使用受限于JQuery。

您可以查看开源javascript日期库

如果无法添加此文件,至少可以查看代码以查看边缘案例的处理方式。

添加2“完整月份”(即30天x 24小时)中的毫秒数(或秒数、小时数或天数)。其想法是,整个日期都会发生变化,而不仅仅是单个[月份]部分:

(+a)
强制将日期设置为从历元开始的毫秒数。(这也可以写为)。然后执行相反操作,并根据历元偏移创建日期

免责声明:我不确定具体的规则是什么
,它可能使用“一个月30.5天启发式”(365/12=30.41)或其他变体。我怀疑它没有考虑月持续时间(文档中确实说明“-1[月]表示-31天”)或闰年。

我不知道为什么这样做有效,但确实有效,谢谢。那么30天乘以2个月的平均数是一个月的天数吗?@Nathan每月30.5天是一年中更好的平均数。粗略地但我不确定VFP使用了什么。如果使用非全天(或关心闰秒),则开始时间应偏向“中午”,以说明较小的误差。
var a = new Date('1998-12-31')
var ms_in_month = 30 * (24 * 60 * 60) * 1000
var b_ticks = (+a) + 2 * ms_in_month
var b = new Date(b_ticks)
alert(b) // Sun Feb 28 1999 16:00:00 GMT-0800 (Pacific Standard Time)