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. day 41 前端之前端初识

    前端之前端初识   前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...

  2. java基础之静态代码块,局部代码块,构造代码块区别。

    java中有几种常见的代码块,那怎样区别他们呢? 这里就这些问题,浅谈下我个人的理解. 1.局部代码块 局部代码块,又叫普通代码块.它是作用在方法中的代码块.例如: public void show( ...

  3. ubuntu 更新国内源

    1.备份原有源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 2. 修改文件并添加国内源 vi /etc/apt/sourc ...

  4. MySQL数据库--创建表,查询

    MySQL创建表: 表(一)Student (学生表): CREATE TABLE `Student` ( `sno` ) DEFAULT NULL, `sname` ) DEFAULT NULL, ...

  5. <每日一题>题目22:简单的python练习题(31-40)

    #31.分布式爬虫主要解决什么问题? ''' ip 带宽 CPU IO ''' #32.网络传输层 ''' 应用层—http ftp dns nfs 传输层—tcp --udp 网络层—ip icmp ...

  6. 很好用的API管理--Swagger

    1.打开NuGet程序包 2.安装下面两个程序包 3.安装完后会出现SwaggerConfig.cs类,并修改里面的内容 代码: [assembly: PreApplicationStartMetho ...

  7. Redis Set ZSet类型的学习

  8. BZOJ 1822[JSOI2010]Frozen Nova 冷冻波

    网络流+二分. n^3枚举判断每个巫妖可以攻击的精灵,向其连1的边,每个精灵向汇点连1的边. 二分答案,修改源点流向每个巫妖的cap,跑最大流看是否等于精灵数. 恩,看起来没什么毛病. 然后狂WA不止 ...

  9. JS的第七种语言类型--symbol

    今天浏览网页的时候发现,JS中有七种语言类型.我的内心???百度一下哪里来的第七种!! 好吧跟着来回顾一下JS的前6种undefined null boolean string numver obje ...

  10. mysql基础教程(三)-----增删改、子查询、创建管理表、约束和分页

    插入 INSERT语句语法 从其它表中拷贝数据 • 不必书写 VALUES 子句. • 子查询中的值列表应与 INSERT 子句中的列名对应 update语句 • 可以一次更新多条数据. • 如果需要 ...