Is there some function timetostr
in php that will output today/tomorrow/next sunday/etc.
from a given timestamp? So that timetostr(strtotime(x))=x
php strtotime reverse
This might be useful for people coming here.
/**
* Format a timestamp to display its age (5 days ago, in 3 days, etc.).
*
* @param int $timestamp
* @param int $now
* @return string
*/
function timetostr($timestamp, $now = null) {
$age = ($now ?: time()) - $timestamp;
$future = ($age < 0);
$age = abs($age);
$age = (int)($age / 60); // minutes ago
if ($age == 0) return $future ? "momentarily" : "just now";
$scales = [
["minute", "minutes", 60],
["hour", "hours", 24],
["day", "days", 7],
["week", "weeks", 4.348214286], // average with leap year every 4 years
["month", "months", 12],
["year", "years", 10],
["decade", "decades", 10],
["century", "centuries", 1000],
["millenium", "millenia", PHP_INT_MAX]
];
foreach ($scales as list($singular, $plural, $factor)) {
if ($age == 0)
return $future
? "in less than 1 $singular"
: "less than 1 $singular ago";
if ($age == 1)
return $future
? "in 1 $singular"
: "1 $singular ago";
if ($age < $factor)
return $future
? "in $age $plural"
: "$age $plural ago";
$age = (int)($age / $factor);
}
}
I'm getting an ERROR: unexpected 'list' (T_LIST). What am I doing wrong? –
Wage
Something todo with PHP versions? I got it working by declaring the list
list($singular, $plural, $factor) = $scale;
inside the foreach and replacing the list in the foreach prams with $list
–
Wage That's correct. PHP 5.5 added "Unpacking nested arrays with list()" (php.net/manual/en/control-structures.foreach.php) –
Hienhieracosphinx
Thank you! That saved me a lot of time. This should be a built in function! –
Intemerate
There cannot be a strtotime
reverse function because this is not a bijection. The source string from which you get a UNIX timestamp when you use strtotime
can be formatted in many different ways. So if you decide to reverse the function, how can you know what string format to use ? It could well be 2010-08-05 or 10 September 2000, etc. This is exactly why there is no reverse function, but as Andypandy rightly said, you have to use date()
which allows you to actually define the string format you wish to end up with. I know this question is old, but I thought it deserved this answer so other users understand why there is no such function in PHP.
whilst technically "correct" this does not answers the OP's question, rather it just furthers a negative stereotype of the all knowing programmer who knows better than the person asking the question. another approach would be to say something like this--> https://mcmap.net/q/1325205/-converting-a-datetime-back-to-the-original-format –
Tabbi
date("Y-m-d",time()) can do the job. –
Cheerio
© 2022 - 2024 — McMap. All rights reserved.
date()
. I meant to ask, is there a direct function that will do reverse ofstrtotime
? – Sarena($timestamp-strtodate('today'))/86400
. I was just wondering whether there already was a function builtin in php. – Sarena