两个PHP方面的东西,超过2038的时间和唯一订单号算法

2014年10月01日  php开发 1条评论 阅读264次

DateTime::format 被设计成不受外部设置影响(面向对象就应该如此)
所以无论你如何改变环境参数 date_default_timezone ,都不会影响输出结果
要想改变 DateTime::format 的时区设置,需要向

DateTime::setTimezone 传入一个时区对象 DateTimeZone

1 $d new DateTime(‘@2444486400‘);
2 $d->setTimezone(new DateTimeZone(‘PRC‘));
3 echo $d->format(‘Y-m-d H:i:s‘);    //2047-06-19 00:00:00

将大于2038年的标准时间转化成时间戳

1 $d new DateTime(‘2047-06-19 00:00:00‘);
2 echo $d->format(‘U‘);    //2444486400

以上内容节选自:http://levi.cg.am/archives/2868

PHP生成唯一订单号算法:

用uniqid获取一个基于当前的微秒数生成的唯一不重复的字符串(但是他的前7位貌似很久才会发生变动,所以不用考虑可删除),取其第8到13位。但是这个字符串里面有英文字母,咋办?
用ord获取他的ASCII码,所以就有了下一步:用str_split把这个字符串分割为数组,用array_map去操作(速度快点)。
然后返回的还是一个数组,KO,在用implode弄成字符串,但是字符长度不定,取前固定的几位,然后前面加上当前的年份和日期,这个方法生成的订单号,全世界不会有多少重复的。

view source

print?

1 /**
2  *
3  * uniqid - 官方是这样说的:
4  * Gets a prefixed unique identifier based on the current time in microseconds.
5  */
6 function build_order_no()
7 {
8     return date(‘Ymd‘).substr(implode(NULL, array_map(‘ord‘,str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
9 }

算法部分节选自:http://levi.cg.am/archives/3373

时间: 2024-10-13 12:22:59

两个PHP方面的东西,超过2038的时间和唯一订单号算法的相关文章

记录这两天所学的东西

自2016年正式上班以来,目前没有什么开发任务,因为我们的项目已经接近尾声了,正在进行测试和修改需求以及BUG,这两天也学到一点小东西,记录一下. 昨天带我的同事叫我使用fastjson来实现一下后台,因为我们前面用的是json-lib,这个比较简单,两者作用是一样的,只不过函数名字不同,改一下函数名字就好了.后面发现fastjson可以转换成整个javabean,然后我就挑战了一下陌生内容,一下子就搞定了,这方面的感觉还不错!昨天还了解了一下事件冒泡和事件委派,但是只是限定于理论方面的,我觉得

php解决时间超过2038年

问题 超过2038年的时间 php怎么处理? 1 echo date('Y-m-d',2147483647); //date函数能处理的最大整数2147483647 ->2038-01-19 就是2的31次方-1得到2147483647,如果超过了这个值怎么办? 如果还是使用date这个函数会乱掉. 解决方案:使用DateTime类 1 $d = new DateTime('@2147493648'); 2 $d->setTimeZone(new DateTimeZone('PRC')); 3

小记:Quartz 当 Job 执行时间超过触发间隔时间时所发生的情况

一个普通的 Job 实现如下: public class Job1 : IJob { public void Execute(IJobExecutionContext context) { Console.WriteLine(DateTime.Now + ": Job1" + m); } } public class Program { static void Main(string[] args) { var props = new NameValueCollection(); //

在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。

题目:在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素.要求:(1)给出算法的基本设计思想.(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释.(3)说明你所设计算法的时间复杂度和空间复杂度. (1)基本的设计思想: 一个数字出现的次数超过了长度的一半, 那么我们可以这样认为这个数字出现的个数一定大于其他全部数字出现的个数之和.算法的步骤如下: ①设数组为data[],数组长度为n,i=1.置currentAxi

PHP 时间戳超过2038年以后的解决方法

在项目中有的业务场景需要用户购买会员或者套餐等涉及到有效期问题的功能,如果用户购买较多超过了2038年,那么按照普通的时间戳转换日期或者日期转换时间戳就会出现问题, 这种情况是有存在的可能的,所以需要有解决的方法,目前php5.2版本以后可以内置DateTime对象进行处理 工作中几种处理方法: // 1.日期字符串转换为时间戳 $obj = new DateTime("2790-08-08"); echo $obj->format("U"); // 2589

两台虚拟机之间拷贝东西

本机(hadoop1)文件拷贝到其他主机 操作命令   scp -r module [email protected]:/opt/module -r递归 module本地目录 root操作的用户 hadoop2主机名 /opt/module拷贝到虚拟机的目录 [[email protected] opt]#   scp -r module [email protected]:/opt/moduleThe authenticity of host 'hadoop2 (192.168.1.102)'

如何解决时间超过2038问题

//1.在PHP5.2提供了一个类Datetime <?php //将年-月-日转成时间戳 $d = new DateTime('2047-06-19 00:00:00'); echo $d->format('U'); //将时间戳转成年-月-日 $d = new DateTime('@2444485400'); $d->setTimezone(new DateTimeZone('PRC')); echo $d->format('Y-m-d H:i:s'); //2.依靠PHP版本

BZOJ 2038 小z的袜子 &amp; 莫队算法(不就是个暴力么..)

题意: 给一段序列,询问一个区间,求出区间中.....woc! 贴原题! 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子.当然,小Z希望这个概

统计两组数据的交集和补集(新旧数据的差异比较算法)遍历一次

旧数据A = {}新数据B = {} 新增项:B - A = { x | x∈B且x∉A}删除项:A - B = { x | x∈A且x∉B}共有项:B ∩ A = { x | x∈B且x∈A} import java.io.BufferedReader; import java.io.Closeable; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; im