起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 207|回复: 6

【结贴】俩日期之间的月份用什么函数

[复制链接]
发表于 2009-9-11 16:08:15 | 显示全部楼层 |阅读模式
我使用了DateUtils.MonthsBetween 好像不好用啊

[B]procedure[/COLOR][/B] TMainForm[/COLOR].[/COLOR]ButtonClick[/COLOR](Sender[/COLOR]:[/COLOR] [B]TObject[/COLOR][/B]);
[B]var[/COLOR][/B]
   now[/COLOR],[/COLOR] date1[/COLOR],[/COLOR] date2[/COLOR] :[/COLOR] [B]Double[/COLOR][/B];
   strList[/COLOR] :[/COLOR] TStringList[/COLOR];
[B]begin[/COLOR][/B]
   strList[/COLOR] :=[/COLOR] TStringList[/COLOR].[/COLOR]Create[/COLOR];

   now[/COLOR] :=[/COLOR] SysSrv[/COLOR].[/COLOR]SysService[/COLOR].[/COLOR]Time[/COLOR];          [I]//获取服务器时间[/COLOR][/I]

   strList[/COLOR].[/COLOR]Add[/COLOR](SysUtils[/COLOR].[/COLOR]Format[/COLOR]('服务器日期:%s'[/COLOR],[/COLOR] [[/COLOR]SysUtils[/COLOR].[/COLOR]FormatDateTime[/COLOR]('yyy-M-d'[/COLOR],[/COLOR] now[/COLOR])]))[/COLOR];

   date1[/COLOR] :=[/COLOR] DateUtils[/COLOR].[/COLOR]StartOfTheMonth[/COLOR](now[/COLOR]); [I]//date1 为当月首日[/COLOR][/I]
   date2[/COLOR] :=[/COLOR] jsDateUtil[/COLOR].[/COLOR]IncMonth[/COLOR](date1[/COLOR],[/COLOR] 1[/COLOR]);  [I]//date2 为下月首日[/COLOR][/I]

   strList[/COLOR].[/COLOR]Add[/COLOR](SysUtils[/COLOR].[/COLOR]Format[/COLOR]('date1日期:%s'[/COLOR],[/COLOR] [[/COLOR]SysUtils[/COLOR].[/COLOR]FormatDateTime[/COLOR]('yyy-M-d'[/COLOR],[/COLOR] date1[/COLOR])]))[/COLOR];
   strList[/COLOR].[/COLOR]Add[/COLOR](SysUtils[/COLOR].[/COLOR]Format[/COLOR]('date2日期:%s'[/COLOR],[/COLOR] [[/COLOR]SysUtils[/COLOR].[/COLOR]FormatDateTime[/COLOR]('yyy-M-d'[/COLOR],[/COLOR] date2[/COLOR])]))[/COLOR];


   strList[/COLOR].[/COLOR]Add[/COLOR](SysUtils[/COLOR].[/COLOR]Format[/COLOR]('date1和date2差%d个月'[/COLOR],[/COLOR] [[/COLOR]DateUtils[/COLOR].[/COLOR]MonthsBetween[/COLOR](date1[/COLOR],[/COLOR] date2[/COLOR])]))[/COLOR];

   jsDialogs[/COLOR].[/COLOR]ShowMsg[/COLOR](strList[/COLOR].[/COLOR]Text[/COLOR],[/COLOR] ''[/COLOR]);

   strList[/COLOR].[/COLOR]Free[/COLOR];
[B]end[/COLOR][/B];
[/FONT]
回复

使用道具 举报

 楼主| 发表于 2009-9-11 16:12:49 | 显示全部楼层
弹出差0个月 但是应该是1个月啊

如果改成
date2[/COLOR] :=[/COLOR] jsDateUtil[/COLOR].[/COLOR]IncMonth[/COLOR](date1[/COLOR],[/COLOR] 2[/COLOR]);  [I]//date2 为下下月首日[/COLOR][/I]

这样就好使 弹出差2月
回复 支持 反对

使用道具 举报

发表于 2009-9-11 16:56:53 | 显示全部楼层
比如2009-8-31到2009-10-1你说这里是相差一个月呢,还是相差两个月?
(MonthsBetween返回的是1)
回复 支持 反对

使用道具 举报

发表于 2009-9-11 17:07:09 | 显示全部楼层
补充:(更详细的请看delphi的相关帮助)
MonthsBetween 函数返回的是一个近似值,该近似
值基于每个月份为 30.4375 天。不足一个月的数字将不被计算。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-12 08:40:38 | 显示全部楼层
你按1楼的代码试试
2009-9-1和2009-10-1肯定是差一个月啊。

如果按每个月份为 30.4375 天才是一个月
那 2009-1-31和 2009-3-1也不够一个月??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-12 08:41:44 | 显示全部楼层
最初由 zfang 发布
[B]比如2009-8-31到2009-10-1你说这里是相差一个月呢,还是相差两个月?
(MonthsBetween返回的是1) [/B]


这种返回1个月可以理解
但2009-9-1到2009-10-1返回0个月就有点不尽人意了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-12 08:45:02 | 显示全部楼层
算了
google了一下
这回真不是x3的问题
结贴吧
想想办法解决了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 05:22 , Processed in 0.037543 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表