喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
     
标题: [原创]实现从指定时间向下推n个月的函数  
 
bjbs_270
中级会员
Rank: 3Rank: 3
中级会员



UID 17027
精华 1
积分 265
帖子 267
金钱 255 喜悦币
威望 10
人脉 0
阅读权限 30
注册 2002-10-16
来自 河南·南阳---深圳
状态 离线
[原创]实现从指定时间向下推n个月的函数

前一段时间做了一个月报表统计用下了如题的功能,结合别人用mktime()函数我写了一个可是后来老是出错,郁闷极。周末抽出一点时间写一个来用,但愿能对部分村民有用。

<?
/*
 *  作者:心灯
 *  功能:实现从指定时间向下推N个月的函数
 *  month($ymd,$len) $ymd时间,$len推出几个月
 *  $ymd='2005-01-01';
 */
function month($ymd='',$len='12'){
    
$month  = array();
    
$lang   $lang."<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">";
    if(
$ymd){//判断时间格式是否正确
        
if(!ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$ymd)){            
            echo 
"<script>alert('函数参数中的日期格式不对');history.back()</script>";
            exit;
        }
    }
    if(
$len){
        if(!
ereg("[0-9]+",$len)){            
            echo 
$lang."<script>alert('函数中的时间长度中含有非法字段');history.back()</script>";
            exit;
        }
    }
    for(
$i=0;$i<$len;$i++){
        if(
$i==0){
            
$mktime $ymd?strtotime($ymd):time();
        }
        
$month[] = date("Y-m",$mktime);//可以根据需要来设计置你要的格式
        
$day date("t",$mktime);
        if(
$i==0)
            
$reday date("d",$mktime);
        else
            
$reday $day;
        
$t1   $mktime;
        
$mktime=date("Y-m-d",mktime(date("H",$t1),date("i",$t1),date("s",$t1),date("m",$t1),date("d",$t1)-$reday,date("Y",$t1)));
        
$mktime =strtotime($mktime);        
    }
    return 
$month;
}
$month month();
foreach(
$month as $key => $v){
    echo 
$v."<br>";
}
?>
效果如下:
2005-01
2004-12
2004-11
2004-10
2004-09
2004-08
2004-07
2004-06
2004-05
2004-04
2004-03
2004-02




http://blog.csdn.net/bjbs_270
2005-2-20 10:04 PM#1
查看资料  访问主页  发短消息  QQ . .   顶部
 
日出东方XP (日出东方XP)
金牌会员
Rank: 6Rank: 6
版主



UID 15503
精华 3
积分 1324
帖子 1272
金钱 1294 喜悦币
威望 30
人脉 0
阅读权限 70
注册 2002-7-27
来自 东河头村
状态 离线
[推荐阅读] 请问在windows98se下能不能调试ASP和PHP?
如果只是下推N个月,完全可以不用时间函数。
数学运算就行了。:p
2005-2-20 10:10 PM#2
查看资料  发短消息  顶部
 
bjbs_270
中级会员
Rank: 3Rank: 3
中级会员



UID 17027
精华 1
积分 265
帖子 267
金钱 255 喜悦币
威望 10
人脉 0
阅读权限 30
注册 2002-10-16
来自 河南·南阳---深圳
状态 离线
[推荐阅读] 招php程序员(上海管吃住)
能看一下吗?

水平有限没有想到更合适的,不过实现功能是可以了,
但愿有更好的方法




http://blog.csdn.net/bjbs_270
2005-2-20 10:15 PM#3
查看资料  访问主页  发短消息  QQ . .   顶部
 
帅的像人渣
金牌会员
Rank: 6Rank: 6
版主



UID 26229
精华 5
积分 2060
帖子 1951
金钱 2004 喜悦币
威望 50
人脉 6
阅读权限 70
注册 2004-2-18
来自 杭州
状态 离线
[推荐阅读] Happy New Year ! Happy New Year !
Date('Y-m-d', time() + 86400 * 30 * n);//86400是每天秒数, 30, 每月天数, n 月数.
2005-2-20 11:59 PM#4
查看资料  访问主页  发短消息  顶部
 
jxxysong (jxxysong)
高级会员
Rank: 4
高级会员



UID 12761
精华 0
积分 902
帖子 910
金钱 902 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2002-2-10
状态 离线
[推荐阅读] 请教一下mysql里的正则!


QUOTE:
最初由 帅的像人渣 发布
[B]Date('Y-m-d', time() + 86400 * 30 * n);//86400是每天秒数, 30, 每月天数, n 月数. [/B]
28、29、31天的月份怎么办?
2005-2-21 12:42 PM#5
查看资料  访问主页  发短消息  QQ . .   顶部
 
帅的像人渣
金牌会员
Rank: 6Rank: 6
版主



UID 26229
精华 5
积分 2060
帖子 1951
金钱 2004 喜悦币
威望 50
人脉 6
阅读权限 70
注册 2004-2-18
来自 杭州
状态 离线
[推荐阅读] 请推荐一块数码相机
那还不简单.  
strToTime('+1 month', 基准时间);
2005-2-21 02:52 PM#6
查看资料  访问主页  发短消息  顶部
 
Verdana (Verdana)
高级会员
Rank: 4
高级会员


UID 14051
精华 1
积分 595
帖子 575
金钱 585 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2002-4-29
来自 四川-成都
状态 离线
[推荐阅读] 偶准备网恋
有时间多看看手册,不要造轮子 ;)

echo mktime(0, 0, 0, date('m') + 10, date('d'), date('Y'));
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
2005-2-21 05:43 PM#7
查看资料  发短消息  QQ . .   顶部
 
bjbs_270
中级会员
Rank: 3Rank: 3
中级会员



UID 17027
精华 1
积分 265
帖子 267
金钱 255 喜悦币
威望 10
人脉 0
阅读权限 30
注册 2002-10-16
来自 河南·南阳---深圳
状态 离线
[推荐阅读] 祝元旦快乐!
哈哈

西西,多谢提醒看来原创二字的分量不轻,会压着我这个菜鸟的. ^_^--------------
其实犯了一个错就是一直想用mktime()这个函数来实现了,忽略了strtotime()这个函数的用法,走了不小的弯路,原来就这到简单一段代码就OK的

<?php
function month($len=12){
    
$month  = array();
    for(
$i=0;$i<$len;$i++){
        if(!
$i){
            
$mktime time();
        }
        
$month[$i]  = date("Y-m",$mktime);
        
$mktime     strtotime("-1 month",$mktime);
    }
    return 
$month;
}
?>
多谢上面几个兄弟,我的思想现在算是开阔了一点。重新认识了strtotime()




http://blog.csdn.net/bjbs_270
2005-2-21 07:56 PM#8
查看资料  访问主页  发短消息  QQ . .   顶部
 
cube316 (cube316)
金牌会员
Rank: 6Rank: 6
老会员



UID 14856
精华 3
积分 1402
帖子 1340
金钱 1372 喜悦币
威望 30
人脉 0
阅读权限 70
注册 2002-6-18
来自 上海
状态 离线
[推荐阅读] 很奇怪的乱码问题
windows版本的PHP自动加载了calendar库,很多函数可以直接用的,像每月多少天等
linux的需要安装的时候自己手工添上

any way, to do is better than to say.
2005-2-22 02:14 AM#9
查看资料  访问主页  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.109115 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP