本文章来介绍根据用户出生年月来计算年龄/生肖/星座的各种程序实例代码,各位朋友不防进入参考
//计算年龄
代码如下 |
复制代码 |
function birthday($mydate){
$birth=$mydate;
list($by,$bm,$bd)=explode('-',$birth);
$cm=date('n');
$cd=date('j');
$age=date('Y')-$by-1;
if ($cm>$bm || $cm==$bm && $cd>$bd) $age++;
return $age;
//echo "生日:$birthn年龄:$agen";
} |
根据年份计算生肖
代码如下 |
复制代码 |
<?php
/**
* 计算.生肖
*
* @param int $year 年份
* @return str
*/
function get_animal($year){
$animals = array(
'鼠', '牛', '虎', '兔', '龙', '蛇',
'马', '羊', '猴', '鸡', '狗', '猪'
);
$key = ($year - 1900) % 12;
return $animals[$key];
}
echo get_animal(1990); // 马
echo get_animal(2010); // 虎
|
根据生日计算星座
代码如下 |
复制代码 |
<?php
/**
* 计算.星座
*
* @param int $month 月份
* @param int $day 日期
* @return str
*/
function get_constellation($month, $day){
$signs = array(
array('20'=>'宝瓶座'), array('19'=>'双鱼座'),
array('21'=>'白羊座'), array('20'=>'金牛座'),
array('21'=>'双子座'), array('22'=>'巨蟹座'),
array('23'=>'狮子座'), array('23'=>'处女座'),
array('23'=>'天秤座'), array('24'=>'天蝎座'),
array('22'=>'射手座'), array('22'=>'摩羯座')
);
$key = (int)$month - 1;
list($startSign, $signName) = each($signs[$key]);
if( $day < $startSign ){
$key = $month - 2 < 0 ? $month = 11 : $month -= 2;
list($startSign, $signName) = each($signs[$key]);
}
return $signName;
}
echo get_constellation(12, 11); // 射手座
echo get_constellation(6, 6); // 双子座
|
本文章来给各位同学详细介绍关于php 计算两个日期这间的间隔天数实例,各位同学可参考,我们一般是把日期用strtotime转换,然后再进行算,这样可以精确到时分秒去哦。
例1
直接把日期转换
代码如下 |
复制代码 |
function daysbetweendates($date1, $date2){
$date1 = strtotime($date1);
$date2 = strtotime($date2);
$days = ceil(abs($date1 - $date2)/86400);
return $days;
}
|
例2
代码如下 |
复制代码 |
<?php
functionmaketime($date)
{
list($year,$month,$day) = explode('-',$date);
returnmktime(0,0,0,$month,$day,$year);
}
$date1 = '2007-01-08';
$date2 = '2007-03-01';
$d = (maketime($date2) - maketime($date1)) / (3600*24);
echo'相差$d 天';
?>
|
例3
PHP实现两个日期间隔的年、月、周、日数的计算
代码如下 |
复制代码 |
<?php
function format($a,$b){
//检查两个日期大小,默认前小后大,如果前大后小则交换位置以保证前小后大
if(strtotime($a)>strtotime($b)) list($a,$b)=array($b,$a);
$start = strtotime($a);
$stop = strtotime($b);
$extend = ($stop-$start)/86400;
$result['extends'] = $extend;
if($extend<7){ //如果小于7天直接返回天数
$result['daily'] = $extend;
}elseif($extend<=31){ //小于28天则返回周数,由于闰年2月满足了
if($stop==strtotime($a.'+1 month')){
$result['monthly'] = 1;
}else{
$w = floor($extend/7);
$d = ($stop-strtotime($a.'+'.$w.' week'))/86400;
$result['weekly'] = $w;
$result['daily'] = $d;
}
}else{
$y= floor($extend/365);
if($y>=1){ //如果超过一年
$start = strtotime($a.'+'.$y.'year');
$a = date('Y-m-d',$start);
//判断是否真的已经有了一年了,如果没有的话就开减
if($start>$stop){
$a = date('Y-m-d',strtotime($a.'-1 month'));
$m =11;
$y--;
}
$extend = ($stop-strtotime($a))/86400;
}
if(isset($m)){
$w = floor($extend/7);
$d = $extend-$w*7;
}else{
$m = isset($m)?$m:round($extend/30);
$stop>=strtotime($a.'+'.$m.'month')?$m:$m--;
if($stop>=strtotime($a.'+'.$m.'month')){
$d=$w=($stop-strtotime($a.'+'.$m.'month'))/86400;
$w = floor($w/7);
$d = $d-$w*7;
}
}
$result['yearly'] = $y;
$result['monthly'] = $m;
$result['weekly'] = $w;
$result['daily'] = isset($d)?$d:null;
}
return array_filter($result);
}
print_r(format('2012-10-1','2012-12-15'));
?> |
现在有很多的短网址应用,点击就跳转到缩短之前的网址了,那今天我们就来看一下,PHP如何获取短网址跳转之前的网址,其实也很简单,就是用php的get_headers 函数,
取得Response Headers,之后慢慢分析就行了。
给出具体实现方法:
代码如下 |
复制代码 |
$header = get_headers($url, 1);
if (strpos($header[0], ’301′) || strpos($header[0], ’302′)) {
if (is_array($header['Location'])) {
return $header['Location'][count($header['Location'])-1];
} else {
return $header['Location'];
}
} else {
return $url;
}
|
实例二
代码如下 |
复制代码 |
<?php
//
echo get_redirect_url('http://www.111cN.nEt');
//输出结果为:http://code.google.com/android/
function get_redirect_url($url){
$redirect_url = null;
$url_parts = @parse_url($url);
if (!$url_parts) return false;
if (!isset($url_parts['host'])) return false; //can't process relative URLs
if (!isset($url_parts['path'])) $url_parts['path'] = '/';
$sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80), $errno, $errstr, 30);
if (!$sock) return false;
$request = "HEAD " . $url_parts['path'] . (isset($url_parts['query']) ? '?'.$url_parts['query'] : '') . " HTTP/1.1rn";
$request .= 'Host: ' . $url_parts['host'] . "rn";
$request .= "Connection: Closernrn";
fwrite($sock, $request);
$response = '';
while(!feof($sock)) $response .= fread($sock, 8192);
fclose($sock);
if (preg_match('/^Location: (.+?)$/m', $response, $matches)){
if ( substr($matches[1], 0, 1) == "/" )
return $url_parts['scheme'] . "://" . $url_parts['host'] . trim($matches[1]);
else
return trim($matches[1]);
} else {
return false;
}
}
|
IP地址转换在整型数据然后保存到数据库中,这是一种常用的做法,我们转换IP地算法是intIP = 256*256*256*w + 256*256*x + 256*y + z即可,下面来给各位同学介绍具体实例。
【转换原理】:假设IP为:w.x.y.z,则IP地址转为整型数字的计算公式为:intIP = 256*256*256*w + 256*256*x + 256*y + z
【PHP的互转】:PHP的转换方式比较简单,它内置了两个函数
int ip2long ( string $ip_address ) //ip转换成整型数值
string long2ip ( string $proper_address ) // 整型数值转换成ip【MySQL的互转】:相对于MsSQL来说MySQL的转换方式比较简单,它和PHP一样也内置了两个函数
IP 转为整型:
select INET_ATON (IP地址)整型数值转换成IP
select INET_NTOA ( IP的整型数值 )
一个实例
1.手工自己的实现方法
代码如下 |
复制代码 |
function ip2number($ip)
{
$t = explode('.', $ip);
$x = 0;
for ($i = 0; $i < 4; $i++)
{
$x = $x * 256 + $t[$i];
}
return $x;
}
function number2ip($num)
{
$t = $num;
$a = array();
for ($i = 0; $i < 4; $i++)
{
$x = $t % 256;
if($x < 0) $x += 256;
array_unshift($a, $x);
$t = intval($t / 256);
}
return implode('.', $a);
}
|
我们要写原生太的文章内容分页程序,原理很简单,就是在编辑时我们在编辑器中插入分页符,然后在显示时我们直接使用explode分页就可以实现了,当然有更高级的就是分页保存不同的记录,然后再生成相对复杂一些。
将正文按照一定字符串进行分割,分割后在按照页码进行数组索引,将当前页码对应数组的值输出即可,好像说得够晕的,下面来个实例:
代码如下 |
复制代码 |
<?php
$str = "asd啊<b>是</b>大叔大叔asd杀毒发[NextPage]生的啊师傅 <a href="asd">asd</a> 啊师傅asd a速度发啥地方";
//接收页码(如果不存在就为1)
$page = $_REQUEST['page'] ? $_REQUEST['page'] : 1;
//通过分割符分割内容
$arr = explode("[NextPage]",$str);
//如果分割出来的数组大小为1即未进行分页
if(count($arr)==1){
echo $str;
}else{
//按页码输出相应的内容
echo $arr[$page-1];
//分页页码
for($i=1;$i<=count($arr);$i++){
if($page == $i){//当前页
echo "<a href='?page=".$i."' class='current'>".$i."</a> ";
}else{
echo "<a href='?page=".$i."' >".$i."</a> ";
}
}
}
?>
|
标签:[!--infotagslink--]