A Selection of really useful Date & Time PHP Snippets. Which are available to use under the MIT license.
Calculates the average time it would take to read a body of text depending on words per minutes, ex. “Less than a minute.”, “3 hours 14 minutes.”, “15 minutes.”
<?php /* * ------------------------------------------------------- * readTime * ------------------------------------------------------- * @Version: 1.0.0 * @Author: FireDart * @Link: http://www.firedartstudios.com/ * @GitHub: https://github.com/FireDart/snippets/DateTime * @License: The MIT License (MIT) * * Calculates the average time it would take to read a * body of text depending on words per minutes, ex. * * "Less than a minute." * "3 hours 14 minutes." * "15 minutes." * * ------------------------------------------------------- * Requirements * ------------------------------------------------------- * PHP 5.3.0+ * * ------------------------------------------------------- * Suggestion on WPM (Words Per Minute) * ------------------------------------------------------- * The default words per minute is 300, this is the average * of an adult. Need to target a specific level? * * 3rd Grade = 150wpm * 8th Grade = 250wpm * Average Adult = 300wpm * College Student = 450wpm * High Level Executive = 575wpm * College Professor = 675wpm * Speed Readers = 1,500wpm * Speed Reading Champion = 4,700wpm (Don't even try) * * ------------------------------------------------------- * Usage * ------------------------------------------------------- * Basic (using 300/m) * echo readTime("The entire text"); * * All options * echo readTime("The entire text", 450); * */ /* * readTime * * Calculates the average time it would take to read a * body of text depending on words per minutes. * * @param mixed $text The text you want to scan * @param int $speed Words per minutes, 300 average adult * @return str */ function readTime($text = null, $speed = 300) { try { // Check if any text exists to scan if(empty($text)) { throw new Exception('No content to analyze.'); } // Make sure speed is no 0 if($speed == 0) { throw new Exception('Words per minute can not be 0.'); } // Trip extra space $length = trim($text); // Remove html from text $length = strip_tags($length); // Explode each space to count words $length = explode(" ", $length); // Count amount of words $length = count($length); // Get amount of words divided by words per minute $time = round($length / $speed); // Is the words per minute 0? Less then a minute read then if($time == 0) { return "Less than a minute."; } else { // Calculate hours and minutes for text $hours = floor($time / 60); $minutes = $time - $hours * 60; $readTime = ''; // Check how many hours it would take to read if($hours > 0) { $readTime .= $hours . " hour"; // Do we need to add an s? if($hours > 1) { $readTime .= "s"; } // If minutes is not 0 add space if($minutes != 0) { $readTime .= " and "; } } if($minutes > 0) { $readTime .= $minutes . " minute"; // Do we need to add an s? if($minutes > 1) { $readTime .= "s"; } } // Return string, ex. // "3 hours 14 minutes." or "15 minutes." return $readTime . "."; } // Catch all errors and report back } catch(Exception $e) { return $e->getMessage(); } }
Take a Date, Time or DateTime and turns it into a human friendly time ago format, ex. “Just now.” (time < 30 seconds), “1 minute ago.”, “23 hours ago.”, “3 months ago.”
<?php /* * ------------------------------------------------------- * timeAgo * ------------------------------------------------------- * @Version: 1.0.0 * @Author: FireDart * @Link: http://firedartstudios.com/ * @GitHub: https://github.com/FireDart/snippets/PHP/DateTime * @License: The MIT License (MIT) * * Take a Date, Time or DateTime and turns it into a human * friendly time ago format, ex. * * "Just now." (time < 30 seconds) * "1 minute ago." * "23 hours ago." * "3 months ago." * * timeAgo can also handel future dates but is not recommended * "In 30 seconds." * "In 5 months." * "In 2 years." * * ------------------------------------------------------- * Requirements * ------------------------------------------------------- * PHP 5.3.0+ * * ------------------------------------------------------- * Usage * ------------------------------------------------------- * Basic * echo timeAgo('2014-07-27 20:00:00'); * * All options * echo timeAgo('2014-07-27 20:00:00', "America/New_York", false); * */ /* * timeAgo * * Take a Date, Time or DateTime and turns it into a human * friendly time ago format, ex. * * @param mixed $date The date of "time ago" * @param str $timezone The timezone you are the user is in * @param boolean $friendly Do we allow "Just now" & "In a moment" * @return str */ function timeAgo($date, $timezone = null, $friendly = true) { // Use try/catch loop for DateTime try { // If you need to set your default_timezone, list of zones: // http://php.net/manual/en/timezones.php if($timezone != null) { // Check if timezone is valid if(!in_array($timezone, timezone_identifiers_list())) { throw new Exception('Please input a valid timezone.'); } date_default_timezone_set($timezone); } // Get the current moment in time $now = new DateTime(); // Get the time we will be working with & validate $ago = new DateTime($date); // How much time is in-between them? $interval = $now->diff($ago); // Get intervals of each units $year = $interval->format('%y'); $month = $interval->format('%m'); $day = $interval->format('%d'); $hour = $interval->format('%h'); $minute = $interval->format('%i'); $second = $interval->format('%s'); // Check if it is a date in the future if($interval->invert == 0) { // If it is we might as well handel it if($interval->format('%y') == "00000") { $time = $year; $unit = "year"; } elseif($interval->format('%m%y') == "0000"){ $time = $month; $unit = "month"; } elseif($interval->format('%d%m%y') == "000"){ $time = $day; $unit = "day"; } elseif($interval->format('%h%d%m%y') == "00"){ $time = $hour; $unit = "hour"; } elseif($interval->format('%i%h%d%m%y') == "0"){ $time = $minute; $unit = "minute"; } else{ $time = $second; $unit = "second"; } } // Check what unit we should use if($interval->format('%i%h%d%m%y') == "00000") { $time = $second; $unit = "second"; } elseif($interval->format('%h%d%m%y') == "0000"){ $time = $minute; $unit = "minute"; } elseif($interval->format('%d%m%y') == "000"){ $time = $hour; $unit = "hour"; } elseif($interval->format('%m%y') == "00"){ $time = $day; $unit = "day"; } elseif($interval->format('%y') == "0"){ $time = $month; $unit = "month"; } else{ $time = $year; $unit = "year"; } // Make it more personable if($unit == "second" && $time < 30 && $interval->invert != 0 && $friendly === true) { return "Just now."; } if($unit == "second" && $time < 30 && $interval->invert == 0 && $friendly === true) { return "In a moment."; } // Add s if number is greater then 1 if($time > 1) { $unit .= "s"; } // Return sentence if($interval->invert == 0) { return "In {$time} {$unit}."; } else { return "{$time} {$unit} ago."; } // Catch all errors and report back } catch(Exception $e) { echo $e->getMessage(); } }
The function getDateTimeFormat
create a valid MySQL-Datetime-Formatted datetime.
By default the function will create the current datetime. You can pass a DateTime Instance to change the output.
Usage
function getDateTimeFormat(DateTime $dateTime = null): string
{
return ($dateTime ?? new DateTime('now'))->format('Y-m-d H:i:s');
}
echo \basteyy\VariousPhpSnippets\getDateTimeFormat();
// Result: current date time in format: yyy-dd-mm hh:mm:ii
echo \basteyy\VariousPhpSnippets\getDateTimeFormat((new DateTime('2020-01-01 10:10:10'))->modify('+2 years'));
// Result: 2022-01-01 10:10:10
The function getNiceDateTimeFormat
returns a nice to read version of a given or, if first argument is null, the current MySQL-Datetime-Formatted datetime.
By default, the function will create the current datetime. You can pass a DateTime Instance to change the output.
Be default, the function used the current default Locale. You can set up a Locale somewhere in your code (before calling the function) or pass a locale as a string as the second parameter to the function.
Usage
function getNiceDateTimeFormat(DateTime $dateTime = null, string $locale = null): string
{
if (!$dateTime) {
$dateTime = new \DateTime('now');
}
if (!isset($locale)) {
$locale = substr(\Locale::getDefault(), 0, 2);
}
return $dateTime->format(match ($locale) {
'de' => 'd. F y, H:i',
default => 'F d. y, h:i a'
});
}
echo \basteyy\VariousPhpSnippets\getNiceDateTimeFormat();
// Result: current date time in format: May 01 22, 09:59 pm
echo \basteyy\VariousPhpSnippets\getDateTimeFormat((new DateTime('2020-01-01 10:10'))->modify('+2 years'), 'de');
// Result: 01. Januar 2022, 10:10 echo \basteyy\VariousPhpSnippets\getDateTimeFormat((new DateTime('2020-01-01 10:10'))->modify('+2 years'));
// Result: January 01 22, 10:10 am
Both Snippets above MIT licensed.