如何在字符串中查找时间戳

时间:2014-04-08 13:53:58

标签: php mysql arrays

我正在运行一个sql并检索这个数组:

array(
  732 => string '1291385393<>victorias<><><>Application reminder email sent (documentation needed).|1291396439<>smalamatinas<><><>Busy, so will call us on Monday. ' (length=146)
  765 => string '1290005590<>smalamatinas<><><>Waiting for phone number. ' (length=56)
  767 => string '1300373010<>susanm<><><>Email sent 17/3/11 re availability to work|1364469282<>sarahn<><><>emailed. ' (length=100)
)

不幸的是,对于这种垃圾编码和字符串数据而言,这是非常古老的代码。我认为当笔记保存在数据库中时会发生这种情况,我可以&#39 ;触摸它们,因为系统可能会损坏。

如何在我的笔记时间戳中找到当前日期或(2015)及以上的日期? 我不知道preg_match()是否有好主意?

或者,如果我可以将我的条件分配给mysql查询?

4 个答案:

答案 0 :(得分:1)

尝试:

$arr = array(
    "1291385393<>victorias<><><>Application reminder email sent (documentation needed).|1291396439<>smalamatinas<><><>Busy, so will call us on Monday. ",
    "1290005590<>smalamatinas<><><>Waiting for phone number. ",
    "1300373010<>susanm<><><>Email sent 17/3/11 re availability to work|1364469282<>sarahn<><><>emailed. "
);

foreach ($arr as $key => $value) {
    preg_match("/^\d+/", $value, $m);
    if ( date("Y",$m[0]) >= 2015 ) {
        echo $value . "<br>";
    }
}

通过array进行迭代,将timestamp与转换为年份进行匹配并与2015年进行比较

答案 1 :(得分:1)

这是你可以做到的一种方式:

<?php

$source = '1291385393<>victorias<><><>Application reminder email sent (documentation needed).|1291396439<>smalamatinas<><><>Busy, so will call us on Monday. ';

// parse
list($ts,) = explode('|', $source);
$ts = (int)current(explode('<', $ts));

// format
echo date('d/m/Y H:i:s A', $ts);

?>

输出: 03/12/2010 14:09:53 PM

只有当所有条目都像......那样一致时,这才有效。


如果时间戳位于每个字符串的边界,那么您可以这样做:

$source2 = '1290005590<>smalamatinas<><><>Waiting for phone number. ';
list($ts2,) = explode('<', $source2);

echo date('d/m/Y H:i:s A', (int)$ts2); // Outputs: 17/11/2010 14:53:10 PM

你会像这样使用它:

if (date('Y', (int)$ts2) > 2015)
{
    // do something
}

答案 2 :(得分:1)

大概这些十位整数是* nix时间戳,尽管你没有明确说明。只要您愿意忽略“|”之后的时间戳,您就可以使用MySQL来检索这些项的子集。在你的数据中。

例如,此查询将执行此操作。

SELECT FROM_UNIXTIME(message) AS timestamp,
       message 
  FROM note
 WHERE FROM_UNIXTIME(message) >= '2011-01-01'

这是一个例子。 http://sqlfiddle.com/#!2/ce9761/4/0

答案 3 :(得分:0)

//Here is list of notes and sub notes that are bigger than current time
$notes = array();            
foreach ($userNotes as $key => $value) {
        //get list of notes
        $arr = explode("|", $value);
        foreach($arr as $note) {
                //find timestamp in each note
                preg_match("/^\d+/",$note, $m);
                //if timestamp is bigger than current time
                if ($m[0]> time()){ 
                    $notes[] = $key;
                }
        }
}
//list of timestamps that are bigger than current time
debug($notes);