y2k38又名千年虫问题,又称Uinx Millennium Bug,此漏洞将会影响到所有32位系统下用Unix时间戳整数来记录时间的PHP,及其它编程语言。

一个整型的变量所能保存的最大时间为2038年01月19日03:14:07,超过这个时间后,整型数值将会溢出。
从1970年01月01日开始,到世界标准时2038年01月19日凌晨03:14:07;2^31-1就是0x7FFFFFFF,在32位系统里表示最大的有符号整数,如果用它来表示秒数,大概相当于68.1年,从1970年到2038年刚好是这个数。
网上很多人说32位系统下显示2038年01月19日03:14:07以后的日期将会溢出,在linux6.5后的64位系统运行完全没问题
 例如:$str = "2040-01-01 00:00:00";

 在window输出的是:

 var_dump( strtotime($str) );
var_dump( date('Y-m-d H:i:s',strtotime($str)) );  

输出的时间有问题!!!

一.解决方法:

第1种方法:把格式化时间转化为Uninx时间戳

 /*如果在php中希望解决y2k38的问题,可以使用DateTime类*/

 //第1种方法:把格式化时间转化为Uninx时间戳
$dt = new DateTime($str); //使用2040年作为构造函数
$time = $dt -> format('U'); //Unsigned Uninx-TIme
echo $time;

第2种方法:把Uninx时间戳转化为格式化时间

 //第2种方法:把Uninx时间戳转化为格式化时间
$dt2 = new DateTime('@2208960000');
$tz = timezone_open('Asia/HONG_KONG');
$dt2 -> setTimeZone($tz);//把时区调整为亚洲香港时间
//echo $dt2 -> format('Y-m-d H:i:s'); //时区默认为UTC时间

二.拓展:使用DateTime获取当前的unix时间并格式化

 $dt3 = new DateTime();
$current = $dt3->format('U');
//echo $current;
$dt4 = new DateTime('@'.$current);
$tz = timezone_open('Asia/HONG_KONG');
$dt4 -> setTimeZone($tz);//把时区调整为亚洲香港时间
echo $dt4 -> format('Y-m-d H:i:s'); //时区默认为UTC时间

PHP--y2k38的解决方法已经时间格式的常用转换的更多相关文章

  1. Python-时间戳、元组时间的格式、自定义时间格式之间的转换

    一.时间戳.元组时间的格式.自定义时间格式之间的转换 1.下面是三者之间的转换关系: 2.代码如下: import time import datetime print(time.time()) #获 ...

  2. iOS 之 时间格式与字符串转换

    这个知识点涉及到三个类:NSDate.NSString,另外是一个最重要的类NSDateFormatter.它起到格式转换的作用,至于方法查看头文件就好了.时间格式注意下:yyyyMMddHHmmss

  3. 格林威治时间格式(GMT)与普通时间格式的互相转换

    GMT --> 普通时间格式: 方法: function GMTToStr(time){ var date = new Date(time) var Str=date.getFullYear() ...

  4. js_时间戳和时间格式之间的转换。

    关于我的理解,简单明了点: 时间戳:把一个日期使用一个数字表示出来,这个数字就是这个日期的秒数. 日期:就是我们常见的时间表现形式. 时间戳对于一般看时间不够直观明了,可是在程序的世界里作用可大了. ...

  5. js时间戳和时间格式之间的转换

    //时间戳转换成日期时间2014-8-8 下午11:40:20 function formatDate(ns){ return new Date(parseInt(ns) * 1000).toLoca ...

  6. js中时间戳和时间格式之间的转换

    //时间格式转化 getNowDate(timestamp) { var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000 va ...

  7. python解决json序列化时间格式

    简单实例 import json from datetime import datetime from datetime import date info = { "name": ...

  8. python scrapy解码方法和时间格式转换

    import scrapy from datetime import datetime class BianSpider(scrapy.Spider): name = 'bian' # allowed ...

  9. Qt中QFtp获取带有中文的文件名称出现乱码的解决方法(执行操作前就转换编码)

    今天研究了一下QFtp这个类,发现访问得到的文件名称中一旦出现中文,不管怎么转换编码格式,最终显示出来的始终都是乱码.由于编码错误,我写了两个函数用于互相转换编码. 一个是由正常编码转为QFTP上所谓 ...

随机推荐

  1. 转:linux下的c/c++开发

    源地址:http://zhidao.baidu.com/question/131261452.html 我就是做LINUX下的C开发的. 准确的说,LINUX下C才是主要的开发语言,但是写应用程序还是 ...

  2. JavaScript性能优化篇js优化

    JavaScript性能优化篇js优化   随着Ajax越来越普遍,Ajax引用的规模越来越大,Javascript代码的性能越来越显得重要,我想这就是一个很典型的例子,上面那段代码因为会被频繁使用, ...

  3. WPF MVVM模式不用Prism

    上一个例子使用了Prism.这个例子不用Prism.用自己封装的库LiuxhCSDLL,其实也差不多. 一.程序结构 二.界面代码以及界面效果 <Window x:Class="WPF ...

  4. vue后台管理项目中菜单栏切换的三种方法

    第一种方法:vue嵌套路由(二) <el-menu :default-active="defaultActive" style="min-height: 100%; ...

  5. hue mysql连接不上数据库排查

    由于CDH所有的组件都会进行agent检测,所以先到/var/log/cloudera-scm-agent(mysql所在节点进行日志排查),可以发现每次连接会产生一个log路径作为记录hue连接my ...

  6. ubuntu关闭防火墙(默认命令)

  7. java的四个访问权限修饰符的作用范围

  8. typescript使用小结

    1. typescript使得js在书写的过程中有了参数类型的限制在 传参的过程中变得严格,减少了不必要的错误的发生 2. tslint同时也兼备了一部分eslint的作用,在一定程度上我们使用tsl ...

  9. __autoreleasing 修饰符

    将对象赋值给附有__autoreleasing 修饰符的变量等同于ARC 无效时调用对象的autorelease方法.我们通过以下源代码来看一下. @autoreleasepool { id __au ...

  10. int 13h,磁盘中断

    直接磁盘服务(Direct Disk Service——INT 13H)  00H —磁盘系统复位 01H —读取磁盘系统状态 02H —读扇区 03H —写扇区 04H —检验扇区 05H —格式化 ...