Javascript相当于visual foxpro gomonth()

时间:2012-08-13 19:00:26

标签: javascript visual-foxpro

我的任务是编写一个用Visual Foxpro编写的遗留应用程序的Web门户。我必须确认怀孕到期日。规则是从当前日期起不超过9个月。我已经试图争辩说这太模糊了,需要几天或几周,但有人告诉我,我必须模仿传统软件。

以下是VSP中的代码:

maxValueForDueDate = GOMONTH(DATE() , 9)

根据MSDN GOMONTH()处理边缘情况如下:

SET CENTURY ON
STORE GOMONTH({^1998-02-16}, 5) TO gdDeadLine

CLEAR
? gdDeadLine  && Displays 07/16/1998
? GOMONTH({^1998-12-31}, 2)  && Displays 02/28/1999
? GOMONTH({^1998-12-31}, -2)  && Displays 10/31/1998

正如你所看到的那样,到12月31日增加2个月不会导致3月2日,不幸的是,这正是以下javascript的作用:

var dDate = new Date('1998-12-31');
dDate.setMonth(dDate.getMonth() + 2);
alert(dDate.toDateString()); // results in - Tue Mar 02 1999

有没有人有他们为这种情况编写的javascript函数?我用Google搜索过,但还没找到我需要的东西。我的第三方用法仅限于JQuery。

2 个答案:

答案 0 :(得分:1)

在2个“完整月份”(即30天x 24小时)内添加毫秒(或秒或小时或天)的数量。这个想法是整个日期被移动,只是单个[月]组件。 For example

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)

(+a)将日期强制转换为自纪元以来毫秒数的数字。 (这也可以写成a.milliseconds)。然后new Date(millis_since_epoch)执行相反的操作,并从纪元偏移量创建一个日期。

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

答案 1 :(得分:0)

您可以查看开源javascript日期库Datejs

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