从sql数据库表中获取订阅日期,我们希望客户能够在一年后的月底之前付款。订阅只是一个月内的某个日期。一年后的部分很容易,弄清楚该月末在哪里,然后以秒为单位将其添加到一年中的部分会给我带来麻烦。
日期存储为从unix地面零开始的秒数。如何找到从该值到该月末的秒数?我尝试使用m-i-Y
月末:
$expDate = date('m-i-Y',$row1["renewDate"]);
这有效。我以字符串形式获取该月的最后一天。但是,如果我尝试:
$endOfMonth = strtotime($expDate);
不起作用。...
回显$expDate
以字符串形式显示月份的最后一天。
回显$endOfMonth
不会返回任何内容...
对此有任何想法。
答案 0 :(得分:0)
strtotime
在任意日期格式下均无法正常工作。您有两种选择:
date_create_from_format
解析自定义日期格式。Y-m-d
可以理解的strtotime
格式
自动。例如:
$date = date('Y-m-t', $row1["renewDate"]);
$timestamp = strtotime($date);
P.S。如评论中所述,您应该使用t
而不是i
。
答案 1 :(得分:0)
您可以玩这样的游戏。如果数据库具有大纪元时间,则可以使用“ @”符号将其转换为日期。您可以通过这种方式获取订阅日期,还可以使用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
答案 2 :(得分:0)
尝试使用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
?>
答案 3 :(得分:0)
mktime($ expDate)不起作用。即使使用expdate变量,它仍会返回当前系统时间。
使用strtotime可以识别的日期格式Y-m-t可以正常工作。谢谢user1597430 ...