php怎么把秒数改为时间,php显示时间常用方法小结?
一、PHP函数Date()获取当前时间
代码如下:<?php echo $showtime=date("Y-m-d H:i:s");?>
显示的格式: 年-月-日 小时:分钟:秒
相关参数:
a:"am"或者"pm"
A:"AM"或者"PM"
d:几日,二位数字,若不足二位则前面补零,如: "01"至"31"
D:星期几,三个英文字母,如: "Fri"
F:月份,英文全名,如: "January"
h:12 小时制的小时,如: "01"至"12"
H:24 小时制的小时,如: "00"至"23"
g:12 小时制的小时,不足二位不补零,如: "1"至12"
G:24 小时制的小时,不足二位不补零,如: "0"至"23"
i:分钟,如: "00"至"59"
j:几日,二位数字,若不足二位不补零,如: "1"至"31"
l:星期几,英文全名,如:"Friday"
m:月份,二位数字,若不足二位则在前面补零;如: "01"至"12"
n:月份,二位数字,若不足二位则不补零;如:"1"至"12"
M:月份,三个英文字母;如:"Jan"
s:秒;如:"00"至"59"
S:字尾加英文序数,二个英文字母;如:"th"、"nd"
t:指定月份的天数;如:"28"至"31"
U:总秒数
w:数字型的星期几,如: "0"(星期日)至"6"(星期六)
Y:年,四位数字;如:"1999"
y:年,二位数字;如:"99"
z:一年中的第几天;如:"0"至"365"
二、PHP5中Date()函数获取时间相差8小时问题的解决方法
只需在输出时间之前加个定义:date_default_timezone_set("PRC");,代码:
<?php
date_default_timezone_set("PRC");
echo date("Y-m-d H:i:s");
?>
三、PHP获取文件创建时间和最后修改时间的函数
filemtime(string filename):返回文件上次被修改的时间,出错时返回false。时间以Unix时间戳的方式返回,可用于Date()。
filectime(string filename):返回文件上次inode被修改的时间,如果出错则返回false。时间以Unix时间戳的方式返回。
fileatime(string filename):返回文件上次被访问的时间,如果出错则返回false。时间以Unix时间戳的方式返回。
四、PHP比较两个日期相差天数
代码:
<?php
echo (strtotime("2008-08-24 00:00:00")-strtotime("2008-08-08 00:00:00"))/86400;
?>
如何解决跨域问题?
现在开发项目,大部分公司采用的都是前后端分离的方式进行开发,由于现在产品形态越来越多,网页、手机端、桌面端等等,为了面对各种端,数据中心化、微服务概念的出现,我们为了集成这些服务,不得不去面对一个常见的问题——解决跨域请求的问题。
以前工作开发中,经常会有这样的问题,前端工程师的前端页面由于跨域问题报错了,来协调后端开发人员解决,后台开发人员还那解释你来看我这边的接口是正常的,应该是你的问题,这是前端开发人员的心顿时是崩塌的,如果你还不知道怎么办的时候,也许会默默的自己去寻找解决方案,一查解决方案,这个工作应该需要前后台一起配合,你还得给后端开发人员去好说歹说,让他们也看看一起解决。我很能理解作为前端的我们真是不容易啊。
关于跨域这个问题,不仅前端工程师需要了解,后端工程师也需要了解更应该重视,因为后面会提及到相关的解决方案,需要共同配合才能完成。借着回答这个问题的机会,我来把跨域的相关内容进行系统的梳理,分享给大家。
什么是跨域跨域(CORS)——跨源资源共享。换成我们前端开发人员能理解的就是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript的实施的安全限制。
换个通俗的比方来说,比如经常会有一些模仿金融机构的钓鱼网站,用了和金融机构类似的域名,你点击进去一看,竟然和你熟悉的金融网站一模一样,如果你没注意域名的差别,如果你在网站上输入了卡号和密码信息那就很危险了,有可能这个网站是frame了金融机构的网站,如果金融网站没有做相关的安全限制,你的信息完全有可能被非法分子获取。由此可见浏览器的同源策略存在是十分有必要的。
我顺便在给大家介绍下如何区分是否是同源,所谓的同源是指,域名,协议,端口均为相同。接下来举几个示例,方便大家进行理解:
常用方法一:使用 JSONP 进行 Get 请求这应该是我们接触到的第一个解决跨域的方法,笔者记得前端入门经典红皮书里有过介绍,JSONP有两部分主成:回调函数和数据。回调函数是当响应完成在页面中调用的函数,回调函数的名字一般在请求中进行制定。而数据就是传入回调函调函数中的JSON数据。为了解释这个,还是我们来看下面这个例子吧:
比如我们来实现一个获取当地天气数据的功能,我们需要在后端与天气接口平台交互获取天气数据,前端页面通过GET后端API的方式获取天气信息。
1、首先定义我们前端页面的回调函数功能,我们定义了一个gotWeather的函数:
2、接下来定义请求方法,请注意callback后面的参数和回调函数保持一致的名字:
3、我们后台接口最终要返回非类似这样的数据内容:
你会发现,数据能够正常返回,你也许会问为什么这样可以,不违背同源原则吗?其实之所以有效,并且不违反安全性,因为这是经过前后端共同协作,约定以这种方式传递数据。但是你会发现使用这种方法会有一个问题是,只能用于Get请求。
常用方法二:跨域资源共享(CORS)请求方式目前这种方式用的比较多,应用比较广泛,如果你的项目受部署环境限制的话,建议还是用这种。
1、什么是CORS?
CORS是一个W3C标准,全称是“跨域资源共享”(跨源资源共享)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持目前,所有浏览器都支持该功能,IE浏览器不能低于IE10.IE8 +:IE8 / 9需要使用XDomainRequest对象来支持CORS。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
CORS 请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
2、什么是简单请求?
2.1、首先介绍下什么是简单请求,请求方法是以下请求方法:
Head
Get
Post
2.2、HTTP 的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
凡是不同时满足上面两个条件,就属于非简单请求。一句话,简单请求就是简单的 HTTP 方法与简单的 HTTP 头信息的结合。
2.2、简单请求的大致流程我做下解释:
加入我们的一个网站页面地址需要去请求一个服务端的API,这个页面的请求头可能是这样的:
上面的头信息中,Origin字段用来说明,本次请求来自哪个域(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求。
如果Origin指定的源,不在许可范围内,服务器会返回一个正常的 HTTP 回应。浏览器发现,这个回应的头信息没有包含Access-Control-Allow-Origin字段,就知道出错了,从而抛出一个错误,被XMLHttpRequest的onerror回调函数捕获。注意,这种错误无法通过状态码识别,因为 HTTP 回应的状态码有可能是200。
如果Origin指定的域名在许可范围内,服务器返回的响应,会多出几个头信息字段。具体的请求交互流程如下图所示:
如果一切顺利正常的话,你就会看到服务端一些返回的头信息
3、什么是非简单请求
3.1、 简单的介绍下什么是非简单请求(not-so-simple request)
非简单请求是那种对服务器提出特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。
非简单请求的 CORS 请求,会在正式通信之前,增加一次 HTTP 查询请求,称为“预检”请求(preflight)。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些 HTTP 动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。这是为了防止这些新增的请求,对传统的没有 CORS 支持的服务器形成压力,给服务器一个提前拒绝的机会,这样可以防止服务器大量收到DELETE和PUT请求,这些传统的表单不可能跨域发出的请求。
3.2、通过示例,我们来了解其实现的原理
3.2.1、比如我们在前端页面的请求代码时这样的如下所示:
上面代码中,HTTP 请求的方法是PUT,并且发送一个自定义头信息X-Custom-Header。
3.2.2、浏览器发现,这是一个非简单请求,就自动发出一个“预检”请求,要求服务器确认可以这样请求。下面是这个“预检”请求的 HTTP 头信息。
“预检”请求用的请求方法是OPTIONS,表示这个请求是用来询问的。头信息里面,关键字段是Origin,表示请求来自哪个源。
除了Origin字段,“预检”请求的头信息包括两个特殊字段。
(1)Access-Control-Request-Method 该字段是必须的,用来列出浏览器的 CORS 请求会用到哪些 HTTP 方法,上例是PUT。
(2)Access-Control-Request-Headers 该字段是一个逗号分隔的字符串,指定浏览器 CORS 请求会额外发送的头信息字段,上例是X-Custom-Header。
3.3、服务器收到“预检”请求以后,检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。
3.4 一旦服务器通过了“预检”请求,以后每次浏览器正常的 CORS 请求,就都跟简单请求一样,会有一个Origin头信息字段。服务器的回应,也都会有一个Access-Control-Allow-Origin头信息字段。
3.4 文字内容有点多,把刚才描述的内容用一张流程图表述下,大家会清晰许多,如下所示:
4、与 JSONP 的比较
CORS 与 JSONP 的使用目的相同,但是比 JSONP 更强大。JSONP 只支持GET请求,CORS 支持所有类型的 HTTP 请求。JSONP 的优势在于支持老式浏览器,以及可以向不支持 CORS 的网站请求数据。
5、接下来给后端开发人员分享下如何配置跨域请求
5.1 PHP 简单示例
5.2 Node 开发人员使用 Express 简单示例:
5.2.1 首先安装 cors 中间件:
npm install cors
5.2.3 然后配置比如入口文件,server/
index.js
5.2.4 你可以对跨域进行配置,如下图所示:
5.2.5 你可以做个请求示例尝试下,如果一切正常,你可以在 web 开发者工具中看到如下所示:
java 的由于我不太熟,可以自行解决方案,原理和 PHP 的道理是差不多的。
常用方法三:nginx 反向代理这个方法应用也十分广泛,也是十分常见的,这也需要服务端配合下面还是用一段Ngxin配置来说明这个问题,如下图所示:
实现原理类似于Node中间件代理,需要你搭建一个中转nginx服务器,用于转发请求。使用nginx反向代理实现跨域,是最简单的跨域方式。只需要修改nginx的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能。实现思路:通过nginx配置一个代理服务器(域名与domain1相同,端口不同)做跳板机,反向代理访问domain2接口,并且可以顺便修改cookie中domain信息,方便当前域cookie写入,实现跨域登录。
小节以上是解决跨域问题最常用的三种方式,应该能解决你业务中遇到的问题,有点需需要提示的是方法二和方法三不要混着用,否则会报“Access-Control-Allow-Origin Not Allow Multiple value”的错误,我推荐大家用方法三使用nginx反向代理做跨域解决方案,比较简单和直接,可谓一劳永逸。当然跨域的方法还有其他的,比如使用WebSocket、postMessage API 、各种 iframe 的解决方案,由于不太常用和篇幅问题原因,就不再一一介绍了,感兴趣的小伙伴们可以自行搜索。
如果你觉得本回答分享对你有所帮助,欢迎给个赞👍支持下,分享出去让更多的人知道,如果你有其它的方法,欢迎再留言区进行分享。
注:本回答第二部部分参考阮一峰的《JavaScript 标准参考教程(alpha)》
更多前端内容分享,欢迎关注「前端达人」及其微信公众号
如何获取服务器当前时间?
1)php是 date('Y-m-d H:i:s', time())
2)var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)myDate.getMonth(); //获取当前月份(0-11,0代表1月)myDate.getDate(); //获取当前日(1-31)myDate.getDay(); //获取当前星期X(0-6,0代表星期天)myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)myDate.getHours(); //获取当前小时数(0-23)myDate.getMinutes(); //获取当前分钟数(0-59)myDate.getSeconds(); //获取当前秒数(0-59)myDate.getMilliseconds(); //获取当前毫秒数(0-999)myDate.toLocaleDateString(); //获取当前日期var mytime=myDate.toLocaleTimeString(); //获取当前时间myDate.toLocaleString( ); //获取日期与时间
如何使用PHP生成随机字符串?
引言
我们经常可能会用到邀请码,邮件验证码,或者需要使用unique 字符串标记用户属性的情况。
今天我们且不说高深的“全局唯一ID”的生成方案,我们说一个简单的,如何生成一个唯一的,随机的,数组字母组成的字符串。
学习时间PHP 有一个内置函数 uniqid,用于生成一个唯一的ID。该函数结构形式:
string uniqid([ string $prefix = ""[, bool $more_entropy = false]] )
用于获取一个带前缀、基于当前时间微秒数的唯一ID。
但是该方法所生成的ID并不是安全的,且依赖于本机的时间戳,有可能在同一微秒生成同一ID。所以安全起见,需要添加上 prefix 参数,以示区别。
more_entropy 参数使生成的ID更具有唯一性,如果设置为 TRUE,uniqid() 会在返回的字符串结尾增加额外的煽(使用combined linear congruential generator)。
这就够了吗?这当然不是最优的解决方法。我们尝试其他解决方案。使用 openssl 带来的加密性和唯一性。
bin2hex(openssl_random_pseudo_bytes($bytes))
使用 openssl_random_pseudo_bytes 函数生成一个伪随机字符串的字节,然后使用 bin2hex 将其格式化为十六进制的字符串。
生成的伪随机字节,其字节数由length参数确定。还指示是否使用了加密功能强的算法来生成伪随机字节,并通过可选的crypto_strongparameter来执行此操作。 此种方法返回的参数,很少情况下会出现false。
美中不足的是,这样生成的数字字符串,只在[0-9][a-z]之间,不够广泛。我们尝试加固这个生成方法,增强其鲁棒性。
上述函数会生成一个区间位于 [$min, $max] 的随机数字。然后调用该函数生成指定长度的字符串。
函数 crypto_rand_secure 函数的实现方法,在PHP标准函数中,可以使用 rand / mt_rand 函数替代。
在PHP 7 中,系统提供了更好的函数,可以替代 crypto_rand_secure 使用,就是 random_bytes 和 random_int。使用内置函数,我们将 getToken 函数改造如下:
当然少不了的测试结果,我们批量生成一些 32 位长度的字符串。
写在最后本文深入探讨了生成随机数字,进而生成指定长度的字符串,实现函数并进行了测试。大家可以在机器环境进行测试。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。