如何使用PHP和PEAR进行不同时区的转换

 更新时间:2016年11月25日 16:53  点击:2182

PHP具备一系列日期和时间函数,这为您获取时间信息提供了便利,您可以将这些信息转换为需要的格式并用于计算或者展示给用户。但是假如您想实现一些复杂的功能,事情可能会变得非常复杂。

  一个简单的例子是在网页上显示时间。在PHP中,您可以简单地使用data()函数读取服务器的时钟并以指定的格式进行显示;但是假如您所要显示的时间是不同时区的,比如,您的公司和服务器位于不同的国家,您需要看到的是本地时间而不是当地时间。

  因此,您需要计算出两地的时差,并进行一些计算从而在不同的时区中进行调整,假如时差很重要,您还需要考虑到日期变更、夏令时、月底的最后一天以及闰年的限制等等。

  正如您想像的一样,假如您手动完成这些时区的数学计算,那么这很快就会变成一件很复杂的事情。幸好,PHP内建的时区函数可以帮助解决这一问题,但这些函数并不直观,需要一些时间来熟悉它们的使用。当然,更加快捷的一个选择是使用PEAR的Date类库,它具备对时区的内建支持,而且到目前为止,这是进行时区转换的最简便的方法。

  这篇指南将向您讲解如何使用PEAR的Date类在不同的时区中进行不同的时间数值转换。我假定您已经安装了Apache、PHP以及PEAR的Date类库并且它们都能正常工作。

  注重:您可以直接从互联网上安装PEAR的Date类库,您可以下载或使用它提供的指南进行安装。

  开始

  让我们从基础的初始化和使用Date对象开始讲解,请创建列表A中的PHP代码:

<?php
// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 15:45:27");

// retrieve date
echo $d->getDate();
?>

  这个例子非常简单,它所包含的类代码使用一个日期/时间字符串初始化了一个Date()对象,然后使用getDate()方法来展示您插入的数值,以下是输出的结果:

  2006-06-21 15:45:27

  如何以不同格式来显示日期呢?假如是一个标准格式,比如ISO格式,那只需要向getDate()传递一个修饰符来指明即可,代码如列表B所示:

<?php
// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 15:45:27");

// retrieve date as timestamp
echo $d->getDate(DATE_FORMAT_ISO_BASIC);
?>

这个例子的输出符合标准的ISO格式。

20060621T154527Z

  假如需要自己定制的格式,您可以使用format()方法来实现这一点,它和PHP的原有的date()函数一样,format()方法可以接收一系列格式定义符来指明日期每个部分的具体格式。列表C展示了使用format()方法的例子(您可以参考类文档来获取格式定义符的完整列表)。

<?php
// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 15:45:27");

// retrieve date as formatted string
echo $d->format("%A, %d %B %Y %T");
?>

  输出的结果如下:

  Wednesday, 21 June 2006 15:45:27

  时区间进行转换

【摘 要】现时QQ挂机十分流行,最近看到某位高人写了这样一段PHP代码实现QQ挂机,特拿出来与各位分享一下。

现时QQ挂机十分流行,最近看到某位高人写了这样一段PHP代码实现QQ挂机,特拿出来与各位分享一下。

 

PHP代码:

<php

$qq = "100000"; //qq号码

$pwd = "123456"; //密码

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://211.139.167.71/waptest/TWF/qqportal/rela/updateuserinfo.jsp");

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //这行是设定curl是否跟随header发送的location,
重要

curl_setopt($ch, CURLOPT_POST, 1);

//curl_setopt($ch, "Connection", "Keep-Alive");

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_POSTFIELDS, "qq=".$qq."&pwd=".$pwd."&FromWhere=register");

$return = curl_exec($ch);

curl_close($ch);

echo strstr($return, "postfield") ? "登录失败" : "登录成功";

?>


注:1、需curl模块支持,2、登陆后,你的好友将会看到你在线 3、不知道如何下线。
其他语言的实现类似,有爱好的朋友可以自己动手开发一下。

date 将服务器的时间格式化

语法描述为string date(string format,int[timestamp]);返回值的数据类型是字符串。

函数说明:

返回值的字符串按配置的格式决定。字符串格式化的选项如下:

a: "am"或是"pm"

A: "AM"或是"PM"

d: 几日,两位数字,若不足则补零;从"01"至"31"

D: 星期几,3个英文字母,如:"Fri"

F: 月份,英文全名,如:"January"

h: 12小时制的小时,从"01"至"12"

H: 24小时制的小时,从"00"至"23"

g: 12小时制的小时,不补零;从"1"至"12"

G: 24小时制的小时,不补零;从"0"至"23"

j: 几日,不足不被零;从"1"至"31"

l: 星期几,英文全名,如:"Friday"

m: 月份,两位数字,从"01"至"12"

n: 月份,两位数字,不补零;从"1"至"12"

M: 月份,3个英文字母;如:"Jan"

s: 秒;从"00"至"59"

S: 字尾加英文序数,两个英文字母,如:"21th"

t: 指定月份的天数,从"28"至"31"

U: 总秒数

w: 数字型的星期几,从"0(星期天)"至"6(星期六)"

Y: 年,四位数字

y: 年,两位数字

z: 一年中的第几天;从"1"至"366"

[学习] PHP中的(伪)多线程与多进程

已经因为没怎么需要,所以没有查这个的资料。最近有一个项目却是需要这样子的功能。

查看了PHP的手册和他人的例子,了解到基本的两种方法:

(伪)多线程:借助外力
利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序。
我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的.

也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础.

假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php

那么这两个文件将是同时执行的.

(PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)

有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢?

其实可是通过参数来控制a.php来运行哪一段程序.

下面看一个例子:

//a.php

<?php
function runThread()
{
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /a.php?act=brnrn"); //这里的第二个参数是HTTP协议中规定的请求头
//不明白的请看RFC中的定义
fclose($fp);
}

function a()
{
$fp = fopen('result_a.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}

function b()
{
$fp = fopen('result_b.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
runThread();
a();
}
else if($_GET['act'] == 'b') b();
?>

打开result_a.log 和 result_b.log 比较一下两个文件的中访问的时间. 大家会发现, 这两个的确是在不同线程中运行的.
有些时间完全一样.

上面只是一个简单的例子, 大家可以改进成其它形式.


既然PHP中也能多线程了, 那么问题也来了, 那就是同步的问题. 我们知道 PHP本身是不支持多线程的. 所以更不会有什么像

1、前言

   分页显示是一种非经常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,经常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行具体的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。

  2、原理

   所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

    每页多少条记录($PageSize)?
    当前是第几页($CurrentPageID)?

   现在只要再给我一个结果集,我就可以显示某段特定的结果出来。

   至于其他的参数,比如:上一页($PreviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。

   以mysql数据库为例,假如要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

   前10条记录:select * from table limit 0,10
   第11至20条记录:select * from table limit 10,10
   第21至30条记录:select * from table limit 20,10
   ……

   这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:

select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize

   拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。

  3、简单代码

   请具体阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等。

<?php
  // 建立数据库连接
  $link = mysql_connect("localhost", "mysql_user", "mysql_password")
    or die("Could not connect: " . mysql_error());
  // 获取当前页数
  if( isset($_GET['page']) ){
   $page = intval( $_GET['page'] );
  }
  else{
   $page = 1;
  }
  // 每页数量
  $PageSize = 10;
  // 获取总数据量
  $sql = "select count(*) as amount from table";
  $result = mysql_query($sql);
  $row = mysql_fetch_row($result);
  $amount = $row['amount'];
  // 记算总共有多少页
  if( $amount ){
   if( $amount < $page_size ){ $page_count = 1; } //假如总数据量小于$PageSize,那么只有一页
   if( $amount % $page_size ){ //取总数据量除以每页数的余数
    $page_count = (int)($amount / $page_size) 1; //假如有余数,则页数等于总数据量除以每页数的结果取整再加一
   }else{
    $page_count = $amount / $page_size; //假如没有余数,则页数等于总数据量除以每页数的结果
   }
  }
  else{
   $page_count = 0;
  }

  // 翻页链接
  $page_string = '';
  if( $page == 1 ){
   $page_string .= '第一页|上一页|';
  }

[!--infotagslink--]

相关文章

  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • C#注释的一些使用方法浅谈

    C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
  • php类的使用实例教程

    php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
  • 双冒号 ::在PHP中的使用情况

    前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况!双冒号操作符即作用域限定操作符Scope Resoluti...2015-11-08
  • PHP mysql与mysqli事务使用说明 分享

    mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。应用比较多的地方是 mysqli的事务。...2013-10-02
  • Postman安装与使用详细教程 附postman离线安装包

    这篇文章主要介绍了Postman安装与使用详细教程 附postman离线安装包,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-05
  • 浅析Promise的介绍及基本用法

    Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
  • 使用jquery修改表单的提交地址基本思路

    基本思路: 通过使用jquery选择器得到对应表单的jquery对象,然后使用attr方法修改对应的action 示例程序一: 默认情况下,该表单会提交到page_one.html 点击button之后,表单的提交地址就会修改为page_two.html 复制...2014-06-07
  • vs2019安装和使用详细图文教程

    这篇文章主要介绍了vs2019安装和使用详细图文教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25