18位Julian Date / TimeStamp PHP转换?

时间:2014-09-04 13:07:03

标签: php mysql

我目前正在为我的工作开发一个项目,它正在使用来自mysql数据库的大量数据,来自数据库的很多行都有一个TimeStamp,但它们的长度是18位。

我有一个计算,将其转换为excel中的友好日期,DD-MM-YY HH:MM:SS。

计算如下(212262066420979000/86400000000) - 2415018.5 = value,然后将excel格式化为dd-mm-yy hh-mm-ss。

如果我使用php进行此计算,我会得到正确的值,但我无法将格式设置为像excel一样友好的日期。

在php中有没有简单的方法呢?

以下是我的代码

$sql = ("SELECT * FROM varmeas WHERE VARIABLE = 'WTSE';");

$result = mysqli_query($conn, $sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysqli_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

echo "<table border='1'>
<tr>
<th>ROUTING_POS</th>
<th>VARIABLE</th>
<th>VAR_MEASURE_1</th>
<th>DATETIME_STAMP</th>
<th>FRIENDLY_DATE</th>
</tr>";

while ($row = mysqli_fetch_assoc($result)) {

  echo "<tr>";
  echo "<td>" . $row['ROUTING_POS'] . "</td>";
  echo "<td>" . $row['VARIABLE'] . "</td>";
  echo "<td>" . $row['VAR_MEASURE_1'] . "</td>";
  echo "<td>" . $row['DATETIME_STAMP'] . "</td>";
  echo "</tr>";


}
echo "</table>";

?>

这会输出一个像 -

这样的表格
ROUTING_POS VARIABLE    VAR_MEASURE_1          DATETIME_STAMP   
FLIS        WTSE            22.20             212262066888394000    

1 个答案:

答案 0 :(得分:1)

(212262066420979000/86400000000) - 2415018.5 = value

提供41718.379872442的值,这是20/03/2014 09:07:01

的MS Excel时间戳值

从Excel时间戳转换为Unix时间戳(基于Windows 1900日历)

对于从Excel时间戳到可以与PHP日期函数一起使用的unix时间戳的快速和脏转换:

$excelValue =  (212262066420979000/86400000000) - 2415018.5;
$unixValue = ($excelValue - 25569) * 86400;

请注意,这将在UST中返回一个值

date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s', $unixValue);

$d = new DateTime('@' . (int)$unixValue, new DateTimeZone('UTC'));
echo $d->format('Y-m-d H:i:s');

修改

将它与现有代码集成就像添加:

一样简单
$excelValue =  ($row['DATETIME_STAMP'] / 86400000000) - 2415018.5;
$unixValue = ($excelValue - 25569) * 86400;
$d = new DateTime('@' . (int)$unixValue, new DateTimeZone('UTC'));
echo "<td>" . $d->format('Y-m-d H:i:s') . "</td>";

后立即

echo "<td>" . $row['DATETIME_STAMP'] . "</td>";