Settype整数更改php中的值

时间:2017-07-06 07:52:56

标签: php string date integer timestamp

我的数据库中有一个名为time的字段。它包含UNIX时间戳。但是数据类型是一个字符串,而在php中,date函数需要一个整数。

所以我尝试将字符串解析为整数但值会改变。

    $time = $value['time'];
    echo "Time string is $time<br/>";

    settype($time,'integer');
    echo "time intenger is".$time."<br/>";

这是我得到的输出

  

时间字符串是1499327190163

     

时间整数是2147483647

我在这里做错了什么?或者有更好的方法将时间戳转换为日期吗?感谢

编辑:我刚刚阅读了关于settype的手册,它说&#34; int&#34;的最大值是PHP_INT_MAX。也许这可能是我的问题,是否可以改变这一点,或者在更改最大整数值时是否存在任何与安全相关的问题?

3 个答案:

答案 0 :(得分:2)

这是因为整数的范围(上限)是:

2147483647

通俗地说,一个杯子不能盛水桶。

PHP的32位版本:

Integers can be from -2,147,483,648 to 2,147,483,647 (~ ± 2 billion)

PHP的64位版本:

Integers can be from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 (~ ± 9 quintillion)

Check this answer

答案 1 :(得分:0)

1499327190163似乎是毫秒中的UNIX时间戳,而PHP日期函数在中的时间戳中工作。 string与int问题是次要问题,因为该值将根据需要隐式转换为int。

更大的问题是该值超过32位整数的上限,但您需要对其进行数学运算才能将其从毫秒转换为秒。之一:

  1. 在数据库中执行;只是SELECT timestamp / 1000

  2. 使用bcdiv在PHP中执行此操作:

    $ts = bcdiv($timestamp, '1000', 0);
    
  3. 将其转换为float并将其划分为float;虽然准确度可能轻微受损。

  4. 剪掉字符串的最后3个字符,基本上具有相同的效果;它只是感觉正确 IMO。

  5. 现在你有一个时间戳PHP的日期函数可以使用。

答案 2 :(得分:-1)

Javascript使用13位数字进行unixtime,因此您需要将其转换为10位unixtime

<?php
$timeStr = "1499327190163";
$timeInt = (int) 1499327190163;
$timestamp = $timeInt / 1000;
$date = date("Y-m-d H:i:s", $timestamp);
echo $date;

$dateTime = new  \DateTime();
$dateTime->setTimestamp($timestamp);
echo $dateTime->format("Y-m-d H:i:s");