PHP输出英文时间日期的安全方法(RFC 1123格式)

最近项目中要为一个rest服务写客户端,其中的签名校验需要在HTTP Header中生成一个RFC 1123格式的Date。

这个问题比较好解决,简单翻阅了PHP文档,使用gmstrftime这个函数就能解决。


代码如下:

string gmstrftime ( string $format [, int $timestamp = time() ] )

调用的代码如下:


代码如下:

echo gmstrftime("%a, %d %b %Y %T %Z",time());
//输出:Tue, 01 Apr 2014 16:16:07 GMT

调试过程中发现,在另外一台电脑上,输出并不像预期中的结果,然后产生了中文:


代码如下:

二, 01  4 2014 16:20:02 GMT

继续翻阅文档,发现文档的注释中有说明,这个函数的结果受setlocale结果的影响,既收当前系统默认的语言的影响。使用下面的命令可以查看当前系统已安装的语言:


代码如下:

locale -a

那么根据刚刚分析的结果,将setlocale强制指定为英语就没问题了,代码如下:


代码如下:

setlocale(LC_TIME, 'en_US');
echo gmstrftime("%a, %d %b %Y %T %Z",time());

至此文章应该已经结束了,不过可惜的是测试用的Ubuntu机器上,因为是Live CD版,恰好没有en_US这个语言,但是有一个en_US.UTF-8。这个时候心理打鼓,这种做法似乎不太安全,我没办法确定运行代码的客户机上,到底有en_US还是有en_US.UTF-8。还好看到文档里的一段comments,可以用gmdate来代替,该函数不受setlocale结果的影响:


代码如下:

gmdate('D, d M Y H:i:s') . ' GMT';

Case closed~需求虽小,要写好并不容易,以后还要多加努力。

(0)

相关推荐

  • PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)

    这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦,临时密码啦等等 复制代码 代码如下: /** * @param string $string 原文或者密文 * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE * @param string $key 密钥 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效 * @return string 处理后的 原文或者

  • php获取指定日期之间的各个周和月的起止时间

    根据指定的前后两个日期,计算这两个日期之间各个周的起始时间和结束时间,以及各个月的起始时间和结束时间 日志格式化类 Date.class.php 复制代码 代码如下: <?php class Datefmt{    function __construct() {}   /**    * 根据指定日期获取所在周的起始时间和结束时间    */   public function get_weekinfo_by_date($date) {     $idx = strftime("%u&qu

  • php日期转时间戳,指定日期转换成时间戳

    写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储.处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候需要互相转换,下面给出互相转换的几种转换方式. 一.在MySQL中完成 这种方式在MySQL查询语句中转换,优点是不占用PHP解析器的解析时间,速度快,缺点是只能用在数据库查询中,有局限性. 1. UNIX时间戳转换为日期用函数: FROM_UNIXTIME() 一般形式:selec

  • 如何使用php输出时间格式

    复制代码 代码如下: <?date_default_timezone_set("ETC/GMT-8");$tm=time();echo date("Y-m-d h:i  a",$tm);echo "<br/><br/>";echo date("Y年m月d日",$tm);?> PHP默认的时区UTC时区,而北京正好位于该时区的东八区,领先UTC时区8个小时,所以在PHP中使用time()函数获

  • php输出指定时间以前时间格式的方法

    本文实例讲述了php输出指定时间以前时间格式的方法.分享给大家供大家参考.具体分析如下: 比如说你需要在php中输出3天前,20分钟以前,可以参考下面的代码 function ago($time) { $time = strtotime($time); $delta = time() - $time; if ($delta < 60) { return 'less than a minute ago.'; } else if ($delta < 120) { return 'about a m

  • PHP判断指定时间段的2个方法

    一.包含小时和分钟的判断 date_default_timezone_set("Asia/Shanghai"); $time = intval (date("Hi")); if ($time > "800" && $time < "1130") { // code } 二.只判断小时 date_default_timezone_set("Asia/Shanghai"); if(d

  • PHP输出时间差函数代码

    PHP输出时间差函数 复制代码 代码如下: <?php  date_default_timezone_set('PRC'); //默认时区  echo "今天:",date("Y-m-d",time()),"<br>";  echo "今天:",date("Y-m-d",strtotime("18 june 2008")),"<br>";

  • js处理php输出时间戳对不上号的解决方法

    由PHP传入JS处理的时间戳我说怎么老是对不上号呢,原来JS时间戳为13位,包含3位毫秒的,而PHP只有10位不包含毫秒的. var nowtime = (new Date).getTime();/*当前时间戳*/ /*转换时间,计算差值*/ function comptime(beginTime,endTime){ var secondNum = parseInt((endTime-beginTime*1000)/1000);//计算时间戳差值 if(secondNum>=0&&s

  • PHP输出英文时间日期的安全方法(RFC 1123格式)

    最近项目中要为一个rest服务写客户端,其中的签名校验需要在HTTP Header中生成一个RFC 1123格式的Date. 这个问题比较好解决,简单翻阅了PHP文档,使用gmstrftime这个函数就能解决. 复制代码 代码如下: string gmstrftime ( string $format [, int $timestamp = time() ] ) 调用的代码如下: 复制代码 代码如下: echo gmstrftime("%a, %d %b %Y %T %Z",time(

  • JavaScript输出当前时间Unix时间戳的方法

    本文实例讲述了JavaScript输出当前时间Unix时间戳的方法.分享给大家供大家参考.具体如下: 下面的代码通过Date对象的getTime()放回unix时间戳,即从1970年1月1日到当前时间的秒数 <!DOCTYPE html> <html> <body> <p id="demo"> Click the button to display the number of milliseconds since midnight, Ja

  • C语言中读取时间日期的基本方法

    C语言time()函数:获取当前时间(以秒数表示) 头文件: #include <time.h> 定义函数: time_t time(time_t *t); 函数说明:此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数.如果t 并非空指针的话,此函数也会将返回值存到t 指针所指的内存. 返回值:成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno 中. 范例 #include <time.h> main(){

  • Java核心教程之常见时间日期的处理方法

    Java日期处理类Date详解 时间的基础知识 时区:整个地球分为二十四时区,每个时区都有自己的本地时间. 为了统一起见,使用一个统一的时间,称为全球标准时间(UTC,Universal Time Coordinated). TC与格林尼治平均时(GMT,Greenwich Mean Time,也翻译成:格林威治标准时间)差不多一样 CST(北京时间),北京时间,China standard Time,中国标准时间.在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8. 时间戳:自197

  • Python获取、格式化当前时间日期的方法

    Python获取当前时间_获取格式化时间: Python获取当前时间: 使用 time.time( ) 获取到距离1970年1月1日的秒数(浮点数),然后传递给 localtime 获取当前时间 #使用 time.localtime(time.time()) import time times = time.time() print(times) # 表示自 1970 年 1月 1 日 过去了多久 # 1581305612.0510154 localtime = time.localtime(t

  • Ruby日期时间的比较,日期转换等时间日期处理方法大全

    Ruby中Date.Time. DateTime这3个类提供 了和日期时间相关的操作. Date只能处理日期Time能处理日期和时间DateTime也能处理日期和时间 其中,DateTime 是Date的一个子类,是对时间部分数据的补充.要使用Date和DateTime类,只需导入date库就可以,要使用Time类,导入time库就行. require 'date' # 提供Date和DateTime类 require 'time' # 提供Time类(可直接使用,但导入后有更多方法) 一般来说

  • javascript实现时间日期的格式化的方法汇总

    有的时候,我们需要一定格式的 时间 比如 2017-05-12 08:48 这样的格式. 上代码先 时间格式化 第一种 function formatDate(time){ var date = new Date(time); var year = date.getFullYear(), month = date.getMonth() + 1,//月份是从0开始的 day = date.getDate(), hour = date.getHours(), min = date.getMinute

  • 使用layui日期控件laydate对开始和结束时间进行联动控制的方法

    1.在页面先引入laydate.js文件 2.html页面控件如下: <input name="begin_time" style="margin-top:8px;width:130px;" id="begin_time" value="${beginTime}" class="Wdate" type="text"/> <input name="deadlin

  • 在Pycharm中自动添加时间日期作者等信息的方法

    1.按照下面路径以此打开 File→→Settings→→Editor→→File and code Templates 右侧找到Python Script,如下图 2.设置相关代码 如下 ##!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : ${DATE} ${TIME} # @Author : 未来战士biubiu!! # @FileName: ${NAME}.py # @Software: ${PRODUCT_NAME} # @Blog

随机推荐