Php 如何从日期识别unix时间戳?
你知道如何从Php 如何从日期识别unix时间戳?,php,regex,timestamp,Php,Regex,Timestamp,你知道如何从1511431687中生成一个简单的IF语句2017年10月31日或2016年1月12日 我正在从一个设定的日期转换为使用unix时间戳,并且需要一个解决方案来分类什么是什么。我想以人类可读的格式显示日期(天/月/年) 所以我有一个$data在一个循环中。它从平面文件中提取日期。旧东西刚刚将日期保存为日期。例如2017年10月31日(与此完全相同) 现在我使用unix时间戳。例如1511431677 我看到人们使用了一个简单的IF语句,但我不能使用它,因为两者都有10个单位长。否则的
1511431687
中生成一个简单的IF语句2017年10月31日
或2016年1月12日
我正在从一个设定的日期转换为使用unix时间戳,并且需要一个解决方案来分类什么是什么。我想以人类可读的格式显示日期(天/月/年)
所以我有一个$data
在一个循环中。它从平面文件中提取日期。旧东西刚刚将日期保存为日期。例如2017年10月31日(与此完全相同)
现在我使用unix时间戳。例如1511431677
我看到人们使用了一个简单的IF语句,但我不能使用它,因为两者都有10个单位长。否则的话,那就行了
$data = // either a timestamp, or a date in this format: 31-10-2017
if (strlen($data) === 10) // it's a timestamp
$data = date("d-m-Y H:i:s", $data);
可能很幼稚,但解决方案可能是检查$data是否有数值
if (is_numeric($data)) { // it's a timestamp
$data = date("d-m-Y H:i:s", (int) $data);
}
您有几个选择:
- 检查字符串是否为所有数字(可能是UNIX时间戳)
- (d-m-Y或m-d-Y日期)
- 确认您认为已确定的日期是否有效
根据您期望的不同格式,我将按以下逻辑顺序进行尝试:
- 如果
ctype\u digit
,请检查值是否在预期范围内
- 如果超出预期范围,请尝试除以
1000
(时间戳以毫秒为单位)
- 否则,尝试以您期望的任何格式与正则表达式匹配
- 用
checkdate
确认这些值是合理的
- 最后转换为
DateTime
对象作为标准化的内部表示形式
如果(strpos($data,'-')==false)//这是一个时间戳
(假设时间戳为正);如果时间戳早于1970年的timestamp base date,请进行调整,以便查找日期的正则表达式?还是时间戳?时间戳较短,\d{10}
@RolandStarke:OP写的两个都是10个单位长,所以都是相同的长度。至少在这种情况下,您不是在寻求澄清,而是在提供解决方案。请在正确的位置发布。注意“+0123.45e6”也是数字的可能重复项…连字符(-)是数字值吗?@deceze OP表示他只需要区分日期字符串和unixtimestamp@Preben不,不是。php-r“var_dump(is_numeric('-'));@Preben仅位于字符串的数字开头(例如-42
)。