Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么unix时间戳需要以'@';为了让strotime()理解它?_Php_Strtotime - Fatal编程技术网

Php 为什么unix时间戳需要以'@';为了让strotime()理解它?

Php 为什么unix时间戳需要以'@';为了让strotime()理解它?,php,strtotime,Php,Strtotime,我注意到strotime()以一种奇怪的方式处理unix时间戳,我很好奇是否有人知道这是为什么: var_export(strtotime('1330725042')); // false var_export(strtotime('@1330725042')); // 1330725042 当给定unix时间戳时,strotime()为什么返回false(除非所述时间戳以@作为前缀) 这是我构建的一个库方法的内部代码,该库方法旨在将未知格式变量“解析”为时间戳。在这种情况下,使用裸stro

我注意到
strotime()
以一种奇怪的方式处理unix时间戳,我很好奇是否有人知道这是为什么:

var_export(strtotime('1330725042'));  // false
var_export(strtotime('@1330725042')); // 1330725042
当给定unix时间戳时,
strotime()
为什么返回
false
(除非所述时间戳以
@
作为前缀)

这是我构建的一个库方法的内部代码,该库方法旨在将未知格式变量“解析”为时间戳。在这种情况下,使用裸
strotime()
没有帮助,因为当传入值实际上是时间戳时,它返回错误的结果


我修改了library方法,对类似时间戳的值进行显式检查,并返回未修改的值,因此。。。我们可以说,这个问题已经没有实际应用了;我只是好奇。

因为strotime的意思是字符串到时间,而您的“1330725042”不是时间字符串,而是用引号括起来的unix时间戳

strotime()用于“2012年3月2日”之类的值


如果您已经有1330725042作为unix时间戳值,那么为什么需要使用strotime()?

strotime()输出时间戳,并且它的参数应该是日期的文本表示形式,因此您使用它是错误的。

可能是因为
strotime
转换为unix时间戳,所以它不需要一个作为参数


Read

Strotime不识别unix时间戳,但识别纯英语日期或相对时间(如“+1天”或“1个月”)


@before值肯定会在调用中触发php的“忽略错误”模式(有趣的副作用),从而将不可解析的值返回到var转储。

strotime()接收的字符串必须采用特定格式

如果
strotime()
无法识别输入格式,则返回
FALSE
。由于unix时间只是一个数字序列,除非明确指定所使用的格式,否则无法正确解析它们。将
@
放在开始处会向函数指示此序列是unix时间格式的

有关更多信息,请参阅以下文档:

其他所有人都正确使用该函数,它接受字符串而不是时间戳字符串。但是,如果您使用@符号获得结果,则可能是运算符表示以下文本是时间戳,或者根据PHP的标准用法@,该函数绕过了错误


无论哪种方式,为什么要对时间戳进行strotime?

strotime()
旨在将英文日期格式转换为unix时间戳,因此提供unix时间戳而不是日期格式将不是此函数的有效使用。可以在php手册的

上看到接受的日期和时间格式。答案是,前导的@表示unix时间戳日期格式,而整数本身是无效的日期格式。见:


为什么
strotime('@1a')
给出了一个非错误的结果-3599,但是我不知道。lol

因为文档上这么说:)我不认为整数是链接Mathieu的有效日期/时间格式+1。我想上面有文件,谢谢。实际上,我不知道unix时间戳可以是一种有效的PHP日期时间格式。@Mathieu-将其作为答案发布,因为它实际上回答了问题的第二部分question@dqhendricks我想知道什么时候会有人问这个问题(:我用更多的信息更新了我的问题。
“@1215282385”
实际上是一种有效的格式。请查看注释中的链接。不幸的是,我必须-1这一点,因为在这种情况下,
@
的存在与抑制错误无关;它只是.WRT why call
strotime()的一部分
关于时间戳,这个问题背后的动机是在代码不知道值已经是时间戳的情况下。我已经用更多信息更新了我的问题。您可能正在使用某个人的库,该库根据您提供的内容调用strotime,而您有一个时间戳。WRT为什么调用
strotime()
在时间戳上,这个问题背后的动机是代码不知道值已经是时间戳的情况。我已经用更多信息更新了我的问题。不幸的是,我必须-1这一点,因为在这种情况下,
@
的存在与抑制错误无关;这只是一部分。感谢链接。我在以下位置找到了:'Unix时间戳“@”“-”?[0-9]+“@1215282385”