PHP-将负时间戳转换为正时间戳


PHP- Convert negative time-stamp to positive

我在Sphinx搜索引擎中存储了"出生日期"作为时间戳(整数)

(例如)

User DOB is "12-01-1960" (Age is 55)
Sphinx side: 3980298496 (MySQL handle this from DB to Sphinx)

在PHP方面,出于搜索目的,我想如下计算时间戳,但它给出负值,因为如果日期小于1970年1月1日,PHP会给出负值

Carbon::now()->subYears('55')->timestamp = -288316800

如何制作正时间戳?这样我就可以从PHP中进行过滤搜索了。或者,请建议其他解决方法。

-288316800 to 3980298496

Sphinx的时间戳属性是一个无符号的32位整数。(它实际上与uint属性没有任何不同)

所以不能将这样的值直接存储在时间戳属性中。

狮身人面像时间戳不适用于1970年之前的日期(0时间戳)

就我个人而言,我使用mysql TODAYS函数为日期获取一个漂亮的简单整数,并将其存储在sphinx属性中。很容易使用(尽管还没有将转换模拟为php函数,所以仍然可以使用

<?php
$days = getOne("SELECT TODAYS('1960-01-12')");

当运行查询时。

(也可以在原始时间戳上添加一个大的偏移量,使其成为正整数,但这也否定了使用日期处理中内置的狮身人面像的便利性)

我认为您可以通过使用DateTime对象来处理它

$dateTime = new DateTime;
$dateTime->setTimestamp(-288316800);
var_dump($dateTime->format('Y')); // prints string(4) "1960"
$dateTime = DateTime::createFromFormat('Y-m-d', '1930-03-03');
var_dump($dateTime->getTimestamp()); // prints int(-1256990210);

基本上,您不在乎它是如何存储在数据库中的,您可以使用DateTime对象将任何整数(正或负)从/转换为时间戳