如何将 unix 时间戳上下舍入到最接近的半小时?

新手上路,请多包涵

好的,所以我正在我的 CRM 系统中开发一个日历应用程序,我需要找到半小时的上限和下限,该时间戳是某人在日历中输入事件的时间戳,以便在数据库上运行一些 SQL 以确定他们是否已经在该时间段内预订了东西。

例如,我的时间戳为 1330518155 = 29 February 2012 16:22:35 GMT+4,所以我需要得到 1330516800 和 1330518600,分别等于 16:00 和 16:30。

如果有人有任何想法或认为我正在以一种愚蠢的方式开发日历,请告诉我!这是我第一次完成这样一项涉及大量时间和日期工作的任务,所以任何建议都不胜感激!

原文由 Ash 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 276
2 个回答

使用模数。

 $prev = 1330518155 - (1330518155 % 1800);
$next = $prev + 1800;

模运算符给出除法的余数部分。

原文由 SenorAmor 发布,翻译遵循 CC BY-SA 3.0 许可协议

我没有看清楚问题,但是这段代码会四舍五入到最接近的半小时,对于那些不需要两者之间范围的人来说。使用了一些 SenorAmor 的代码。道具和他对正确问题的疯狂优雅解决方案。

 $time = 1330518155; //Or whatever your time is in unix timestamp

//Store how many seconds long our rounding interval is
//1800 equals one half hour
//Change this to whatever interval to round by
$INTERVAL_SECONDS = 1800;  //30*60

//Find how far off the prior interval we are
$offset = ($time % $INTERVAL_SECONDS);

//Removing this offset takes us to the "round down" half hour
$rounded = $time - $offset;

//Now add the full interval if we should have rounded up
if($offset > ($INTERVAL_SECONDS/2)){
  $nearestInterval = $rounded + $INTERVAL_SECONDS;
}
else{
  $nearestInterval = $rounded
}

原文由 Eric G 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏