社区首页 >问答首页 >使用strtotime函数传递错误的日期和时间格式的奇怪行为

使用strtotime函数传递错误的日期和时间格式的奇怪行为
EN

Stack Overflow用户
提问于 2016-02-25 08:17:18
回答 2查看 670关注 0票数 6

我试图理解日期函数strtotime()的以下行为

  • strtotime(1420066800)按预期返回false
  • strtotime(1451602800)返回26197048320!但是false作为1451602800并不是有效的日期和时间格式。( new DateTime(1451602800)也是如此)

我阅读了整个支持的日期和时间格式页面,但没有找到与此输入相匹配的内容。

顺便说一下,这些是2015-01-012016-01-01的时间戳。

任何见解都将不胜感激。

更新:

不同版本的测试结果:

代码语言:javascript
代码运行次数:0
复制
PHP 5.1.6  => false
PHP 5.2.17 => 26197048320
PHP 5.3.29 => 26197048320
PHP 5.4.34 => 26197048320
PHP 5.5.18 => 26197048320
PHP 5.6.2  => 26197048320
PHP 5.6.17 => 26197048320
PHP 7.0.2  => 26197048320

运行在Mac 10.11.3上

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-25 08:38:40

让我们从正确的方法开始吧。如果要将时间戳传递给strtotime,则必须在时间戳前加上'@'。它在复合格式页面的“本地化符号”( -> ) "Unix时间戳“下进行解释。

代码语言:javascript
代码运行次数:0
复制
echo(date('r', strtotime('@1420066800'))."\n");
echo(date('r', strtotime('@1451602800'))."\n");

产出如下:

代码语言:javascript
代码运行次数:0
复制
Thu, 01 Jan 2015 01:00:00 +0200
Fri, 01 Jan 2016 01:00:00 +0200

现在,为什么strtotime()1420066800返回false,为1451602800返回26197048320

它期望接收一个字符串,如果它收到一个数字,它不关心它,并首先将它转换为string。然后,它遵循一些规则,并尝试标识字符串中的日期组件。因为'1420066800''1451602800'都不包含任何组件分隔符,所以可能会尝试猜测组件的顺序。

今天,2016-02-25strtotime('1451602800')产生了一个时间戳,转换成可打印的日期,如下所示:'Fri, 25 Feb 2800 14:52:00 +0200'

它让我认为它将输入字符串解释为:14:51:60是时间,2800是年份,其他组件(日、月)是从当前时间初始化的。

文件上说:

函数希望得到一个包含英文日期格式的字符串,并尝试将该格式解析为Unix时间戳(自January 1 1970 00:00:00 UTC以来的秒数),相对于$now中给出的时间戳,或者如果不提供$now,则解析当前时间。

由于您提供的“日期”不遵循任何有效的日期时间格式,所以strtotime()可以自由地返回任何值。它被称为“倒垃圾,倒垃圾”

票数 6
EN

Stack Overflow用户

发布于 2016-02-25 08:39:34

1451602800给出了2800-02-25 14:52:00的时间戳,并被解释为:

代码语言:javascript
代码运行次数:0
复制
1451602800
------
  ^
14:51:60 (or 14:52) time

一年中的今天

代码语言:javascript
代码运行次数:0
复制
1451602800
      ----
       ^
      2800

但只有在64位系统上才能处理该日期范围。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35632682

复制
相关文章
[php][零散代码]php日期计算
[php][零散代码]php日期计算 <?php $startData = "2020-01-1"; $stopData = "2020-01-31"; $s = new \DateTime(
landv
2020/04/25
2.6K0
PHP-包含文件
5、包含文件相当于把包含文件中的代码拷贝到主文件中执行,魔术常量除外,魔术常量获取的是所在文件的信息。
cwl_java
2020/03/26
1.3K0
php日期处理代码
<?php echo "<pre>"; echo date("Y-m-d",strtotime("now")), "\n"; echo "<pre>"; echo date("Y-m-d",strto
用户7108768
2021/09/22
5K0
PHP 日期相关函数
设置时区 date_default_timezone_get(); date_default_timezone_set('PRC'); 时间戳 time(); 得到指定时间的时间戳 mktime( [$hour, $min, $sec, $mon, $day, $year]); 将英文文本的日期或时间转换成时间戳 strtotime($time [, $now]); strtotime('+1 day'); 微秒 microtime( [$get_as_float]); microtime(true)
康怀帅
2018/02/28
1.9K0
php文件包含日志getshell
好久之前,看到过一篇文章,是利用文件包含漏洞,包含的日志文件进行的getshell,看到文章后就感觉,思路不错,不禁反思,为什么当时碰到文件包含的时候没有想着用这些方法来测试,今天就特地写一篇来记(水)录(文)一下,内容很少,看着就当图一乐
Elapse
2021/03/03
2K0
php文件包含日志getshell
文件包含、PHP伪协议
当使用include()函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
字节脉搏实验室
2020/12/21
2.7K0
文件包含、PHP伪协议
【说站】php包含字符
strpos函数返回boolean值。strpos的执行速度比其他函数快。另外,strpos有参数指定的判断位置,但默认为空。意思是判断整个字符串。缺点是对中文的支持不好。
很酷的站长
2022/11/23
1.5K0
【说站】php包含字符
php获取农历日期节日
$c = new DayService(); $today=$c->convertSolarToLunar(date('Y'),date('m'),date('d')); $time ="农
IT工作者
2022/03/01
8K0
PHP 文件包含漏洞姿势总结
文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
信安之路
2018/08/08
4.2K0
PHP 文件包含漏洞姿势总结
PHP 实现公历日期与农历日期的互转换
PHP 实现公历日期与农历日期的互转换 前言:  今天根据客户的需求对时间进行了转换,就是客户要求增加农历日期的显示,在网上抄袭了一段,稍微修改了一下运行成功了,不难的,改动的很少的.
用户2323866
2021/07/07
5.5K0
strftime 中文 python格式化日期包含中文 出错
想用python获取当前时期, 格式是2018年1月1日,结果出现上面错误, 处理方法
ClearSeve
2022/02/11
1.2K0
strftime 中文 python格式化日期包含中文 出错
PHP远程文件包含(RFI)并绕过远程URL包含限制
本文我们讲如何绕过远程URL包含限制。在PHP开发环境php.ini配置文里”allow_url_fopen、allow_url_include“均为“off”的情况下,不允许PHP加载远程HTTP或FTP的url进行远程文件包含时。我们依旧可以使用SMB,来加载执行远程文件。
Ms08067安全实验室
2021/04/07
2.8K0
PHP远程文件包含(RFI)并绕过远程URL包含限制
PHP- 日期和时间函数
date(): 获取当前日期和时间 date()函数用于获取当前日期和时间,返回值为一个格式化的日期字符串。
堕落飞鸟
2023/04/26
2K0
php案例:创建日期时间目录
贵哥的编程之路
2023/10/16
1840
php案例:创建日期时间目录
解决后台返回的Timestamp日期数据里包含T
在response entity 的timestamp字段的get方法上添加注解JsonFormat,如:   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") public Timestamp getUpdateTime() { return updateTime; }
qubianzhong
2018/09/19
1.7K0
PowerQuery 如何获取起止日期内包含的月份?
今天在群里看到一个问题,如何获取起始日期和结束日期之间包含的所有月份,业务逻辑见下图:
披头
2020/05/13
2.3K0
有趣!你会检查单元格是否包含日期吗?
大家知道,Excel将日期存储为数字,只是显示的是日期格式,例如,Excel单元格中显示的是2022年5月10日,但实际上存储的是数字44691。
fanjy
2022/06/04
1.8K0
有趣!你会检查单元格是否包含日期吗?
PHP中的日期相关函数(三)
之前我们已经介绍过了 PHP 的一些相关的日期操作对象,今天我们就来学习剩下的那些面向过程的使用方式。当然,如果是和 DateTime 类中相似的方法我们就不再进行介绍了。另外,Date() 和 time() 这两个非常常用的函数也不会进行介绍,因为大家都已经用滥了,所以我们也就不浪费宝贵的学习资源了。
硬核项目经理
2021/03/16
1.9K0
点击加载更多

相似问题

这是有状态web服务/wcf服务吗?

23

这是托管WCF服务的正确方式吗?

30

如何向WCF服务库添加服务。这是正确的吗?

10

这是WCF服务应用程序的有效使用吗?

36

是否拒绝对Wcf服务的调用?这是web配置的问题吗?

20
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文