Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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时间戳?_Php_Regex_Timestamp - Fatal编程技术网

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
)。