hur.cn - 华软网

 热门搜索

新手问题:怎样取得下一个月份的这个日期

  作者:未知    来源:网络    更新时间:2018/10/11
我想掏出一个整月的数据,比如2005-12-23到2006-1-23的数据。
请问2006-1-23这个日期要怎么取呢?有什么函数吗?
------华软网友回答------
pfc中的一个函数:
//////////////////////////////////////////////////////////////////////////////
//
// Function:   of_RelativeMonth
//
// Access: Public
//
// Arguments:
// ad_source Base date (starting poing).
// al_month   Number of months to increment or decrement the base date by.
//
// Returns:   date 
// The adjusted date.
// If any argument's value is NULL, function returns NULL.
// If any argument's value is Invalid, function returns 1900-01-01.
//
// Description:   Given a date, will return the date +/- the number of months passed
// in the second parameter.
//
//////////////////////////////////////////////////////////////////////////////
//
// Revision History
//
// Version
// 5.0   Initial version
// 5.0.03 Fixed - function would fail under some international date sets
//
//////////////////////////////////////////////////////////////////////////////
//
// Copyright ?1996-1997 Sybase, Inc. and its subsidiaries.  All rights reserved.
// Any distribution of the PowerBuilder Foundation Classes (PFC)
// source code by other than Sybase, Inc. and its subsidiaries is prohibited.
//
//////////////////////////////////////////////////////////////////////////////

integer li_adjust_months, li_adjust_years
integer li_month, li_year, li_day
integer li_temp_month

//Check parameters
If IsNull(ad_source) or IsNull(al_month) Then
date ldt_null
SetNull(ldt_null)
Return ldt_null
End If

//Check for invalid date
If Not of_IsValid(ad_source) Then
Return ad_source
End If

//Number 12 is for the Twelve months in a year.
li_adjust_months = mod(al_month, 12)
li_adjust_years = (al_month / 12)

li_temp_month = Month(ad_source) + li_adjust_months
If li_temp_month > 12 Then
// Add one more year and adjust for the month
li_month = li_temp_month - 12
li_adjust_years ++
ElseIf li_temp_month <= 0 Then
// Subtract one more year and adjust for the month
li_month = li_temp_month + 12
li_adjust_years --
Else
// No need for any adjustments
li_month = li_temp_month
End If

li_year = Year(ad_source) + li_adjust_years
li_day = Day(ad_source)

//Check for a valid day (i.e., February 30th is never a valid date)

Do While Not of_IsValid(Date(li_year, li_month, li_day)) AND DaysAfter(Date(1999,1,1),Date(li_year, li_month, li_day)) = 0 &
and li_day > 0
li_day --
Loop

Date ld_date
String ls_date
ld_date = Date(li_year, li_month, li_day)
ls_date = String(ld_date,'yyyy/mm/dd')
DO WHILE ls_date = '1900/01/01' AND li_day > 0
li_day --
ld_date = Date(li_year, li_month, li_day)
ls_date = String(ld_date,'yyyy/mm/dd')
LOOP

Return( Date(li_year, li_month, li_day))

------华软网友回复------
如果下个月没有这个日期怎么办?
比如20051031-20051130照旧20051031-20051201?
------华软网友回复------
上述程序的最后一段就是解决楼上所说的问题的
------华软网友回复------
这个。。。。。。。
------华软网友回复------
俺是新手。。。您还得教我怎么用啊,总不会是要我新建一个函数。把这个写进去吧。
大大。。。。。
------华软网友回复------
一楼好

呵呵~~
楼主还什么都想省呀?
------华软网友回复------
回复人: allen_lc(都市现代狼) ( ) 信誉:100  2005-11-23 11:22:00  得分: 0  
 
 
   俺是新手。。。您还得教我怎么用啊,总不会是要我新建一个函数。把这个写进去吧。
大大。。。。。
  
 
.........................

新建一个函数,是件很麻烦的事吗,那你用饭怎么办
大大。。。。。




------华软网友回复------
//date old_date =date('2003-12-20') old_date为已知日期
date ls_date,newd //ls_date为下个月一号

int days //next为下个月的天数

ls_date =date(string(year(ls_date)+abs(sign(mod(month(ls_date),12)) -1),'0000')+'-'+string(mod(month(ls_date)+1,12),'00')+'-01')

days =28+integer(mid('3'+string(abs(mod(sign(mod(year(ls_date),4))+sign(mod(year(ls_date),100))+sign(mod(year(ls_date),400)),2) -1))+'3232332323',month(ls_date),1))

if day(old_date)<29 then
  newd = RelativeDate(ls_date ,day(old_date))
else
  newd = RelativeDate(old_date ,days)
end if
//这就是下个月这天的求法。




------华软网友回复------
我不是说新建一个函数有多困难,。。只不过由于我又在其中看见了另外一个函数of_IsValid(ad_source),怕就怕。。。。。。
要是来个递归怎么办。。
呵呵,,,欠好意思,,让大家骂了。。。
555555555

------华软网友回复------
呵呵,狗狗好!

欠好意思,我贴的时候没注意

//Check for invalid date
If Not of_IsValid(ad_source) Then
Return ad_source
End If

楼上把上述代码注释掉就好了,这是检查日期参数的正当性
------华软网友回复------
谢谢大家的帮助。。。
谢谢huangxinru(键盘手) 

     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。