获取从日期到月底 PHP 的秒数

Posted

技术标签:

【中文标题】获取从日期到月底 PHP 的秒数【英文标题】:Get seconds from a date to end of month PHP 【发布时间】:2019-06-19 15:49:32 【问题描述】:

从我们希望客户在一年后的月底之前付款的 sql 数据库表中提取订阅日期。订阅只是一个月内的某个日期。一年后的部分很容易,找出那个月底在哪里,并在几秒钟内将它添加到一年的部分给我带来了问题。

日期存储为从 unix 归零开始的秒数。如何找到从该值到该月月底的秒数?我尝试使用 m-i-Y 将日期值转换为实际日期

月末:

$expDate = date('m-i-Y',$row1["renewDate"]);

这行得通。我以字符串形式获得该月的最后一天。但如果我尝试:

$endOfMonth = strtotime($expDate);

没用……

echo'ing $expDate 以字符串形式显示该月的最后一天。

回显$endOfMonth 什么都不返回...

感谢您对此的任何想法。

【问题讨论】:

i 表示分钟(带前导零)。我想您希望t 找到该月的最后一天。 Docs。如果你真的想把事情精确到秒,你也必须将$expDate 强制到午夜。 【参考方案1】:

strtotime 不适用于任意日期格式。你有两个选择:

    使用date_create_from_format 解析自定义日期格式。 将您的字符串转换为Y-m-d 可以理解的strtotime 格式 自动。

例如:

$date = date('Y-m-t', $row1["renewDate"]);
$timestamp = strtotime($date);

附:如 cmets 所述,您应该使用 t 而不是 i

【讨论】:

【参考方案2】:

你可以玩这样的东西。如果数据库有纪元时间,那么您可以使用“@”符号将其转换为日期。您可以通过这种方式获取订阅日期,也可以使用 m/t/Y 获取订阅月的结束日期。您可以使用 get Timestamp 将其转换回 DT,然后再转换为 UNIX 时间。看起来它适用于时间 = 1560961801。

$row1["renewDate"] = 1560961801;
$unixfromDB = $row1["renewDate"];

$date = new DateTime('@' .$unixfromDB); // your UNIX timestamp.     
$subdate =  $date->format( 'm/d/Y' ); // subscription date

$endmonth = $date->format( 'm/t/Y' ); // end of month date
$endmonth = DateTime::createFromFormat('m/d/Y', $endmonth);
$endmonth = $endmonth->getTimestamp();  // UNIX timestamp for end of month.

echo ($endmonth - $unixfromDB) / (60 * 60 *24);  // days to end of month

【讨论】:

【参考方案3】:

尝试使用mktime() 而不是strtotime()

<?
/* establish variables */
$now=time();    // epoch seconds right now
$expDate = date('m-t-Y', $row1["renewDate"]);   //note the switch to 't' as suggested by @ehymel
$eom = mktime($expDate);    // converts 'end of month' date into epoch seconds

/* results */
$secondsleft = $eom - $now;     // number of seconds until the end of the month
echo $secondsleft;  // return results
?>

【讨论】:

谢谢大家,是的,'i' 是一个错字... mktime($expDate) 工作(我以为我试过了...哦)...这是最简单的,可以做什么我需要。再次感谢大家! 希望您在我的回答中打勾。很高兴这对你有用。谢谢!【参考方案4】:

mktime($expDate) 不幸的是没有用,至少在 CentOS6.9 中是这样。即使使用 expdate 变量,它仍然返回当前系统时间。

使用 strtotime 可以识别的日期格式 Y-m-t 确实可以正常工作。感谢 user1597430...

【讨论】:

以上是关于获取从日期到月底 PHP 的秒数的主要内容,如果未能解决你的问题,请参考以下文章

如何从日期字符串中获取经过的秒数?

我很难从一年中的某一天和自午夜以来的秒数获取日期/时间组件

PHP日期格式化

PHP日期和函数

从纪元到相对日期的秒数

php获取当前时间