Below, a function to create TNG-style stardates, taking 2009 to start stardate 41000.0. In fact, the offset is trivial to adjust if you wish to begin from a different date.
<?php
function getStardate(void)
{
$offset = 2000;
$seconds_per_stardate = 31449.6; // is the number of seconds in a year divided by 1000, for hopefully obvious reasons
return time() / $seconds_per_stardate + $offset;
}
?>
Other series use less reliable stardate formats, which makes it difficult [read: nigh impossible] to create a function that converts a unix timestamp into a stardate.
time
(PHP 4, PHP 5)
time — 現在の Unix タイムスタンプを返す
説明
int time
( void
)
現在時刻を Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒として返します。
例
例1 time() の例
<?php
$nextWeek = time() + (7 * 24 * 60 * 60);
// 7 日 * 24 時間 * 60 分 * 60 秒
echo 'Now: '. date('Y-m-d') ."\n";
echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n";
// あるいは strtotime() を使用します
echo 'Next Week: '. date('Y-m-d', strtotime('+1 week')) ."\n";
?>
上の例の出力は、たとえば 以下のようになります。
Now: 2005-03-30 Next Week: 2005-04-06 Next Week: 2005-04-06
注意
ヒント
PHP 5.1 以降、$_SERVER['REQUEST_TIME'] によってリクエスト開始時のタイムスタンプが取得できるようになりました。
time
anon
27-Jan-2009 03:16
27-Jan-2009 03:16
jeff
22-Oct-2008 12:11
22-Oct-2008 12:11
I created a function to output human readable format from a timestamp
<?php
function readable_time($timestamp, $num_times = 2)
{
//this returns human readable time when it was uploaded (array in seconds)
$times = array(31536000 => 'year', 2592000 => 'month', 604800 => 'week', 86400 => 'day', 3600 => 'hour', 60 => 'minute', 1 => 'second');
$now = time();
/* Incorporates fix by Waylon */
$secs = $now - $timestamp;
//Fix so that something is always displayed
if ($secs == 0) {
$secs = 1;
}
/* /Waylon */
$count = 0;
$time = '';
foreach ($times AS $key => $value)
{
if ($secs >= $key)
{
//time found
$s = '';
$time .= floor($secs / $key);
if ((floor($secs / $key) != 1))
$s = 's';
$time .= ' ' . $value . $s;
$count++;
$secs = $secs % $key;
if ($count > $num_times - 1 || $secs == 0)
break;
else
$time .= ', ';
}
}
return $time;
}
//the second paramater is the number of rounds to output. if you put in more than the time allows, it will just show as much as it can
echo readable_time(time()-(60*60*24*8)-3681, 5) . ' ago<br />';
echo readable_time(time()-(60*60*24*8)-3681) . ' ago';
?>
outputs:
1 week, 1 day, 1 hour, 1 minute, 21 seconds ago
1 week, 1 day ago
[EDIT BY danbrown AT php DOT net: Includes a fix by "Waylon" from 21-DEC-08 @ 16:00 EST with the following note:
"The readable_time function is great, except it doesn't work with times that happened immediately (i.e. the $timestamp == $now). Here's my fix."]
Anonymous
02-Sep-2008 03:30
02-Sep-2008 03:30
A cleaner example (half the comparisons) of distanceOfTimeInWords() function below:
<?php
public static function distanceOfTimeInWords($fromTime, $toTime = 0, $showLessThanAMinute = false) {
$distanceInSeconds = round(abs($toTime - $fromTime));
$distanceInMinutes = round($distanceInSeconds / 60);
if ( $distanceInMinutes <= 1 ) {
if ( !$showLessThanAMinute ) {
return ($distanceInMinutes == 0) ? 'less than a minute' : '1 minute';
} else {
if ( $distanceInSeconds < 5 ) {
return 'less than 5 seconds';
}
if ( $distanceInSeconds < 10 ) {
return 'less than 10 seconds';
}
if ( $distanceInSeconds < 20 ) {
return 'less than 20 seconds';
}
if ( $distanceInSeconds < 40 ) {
return 'about half a minute';
}
if ( $distanceInSeconds < 60 ) {
return 'less than a minute';
}
return '1 minute';
}
}
if ( $distanceInMinutes < 45 ) {
return $distanceInMinutes . ' minutes';
}
if ( $distanceInMinutes < 90 ) {
return 'about 1 hour';
}
if ( $distanceInMinutes < 1440 ) {
return 'about ' . round(floatval($distanceInMinutes) / 60.0) . ' hours';
}
if ( $distanceInMinutes < 2880 ) {
return '1 day';
}
if ( $distanceInMinutes < 43200 ) {
return 'about ' . round(floatval($distanceInMinutes) / 1440) . ' days';
}
if ( $distanceInMinutes < 86400 ) {
return 'about 1 month';
}
if ( $distanceInMinutes < 525600 ) {
return round(floatval($distanceInMinutes) / 43200) . ' months';
}
if ( $distanceInMinutes < 1051199 ) {
return 'about 1 year';
}
return 'over ' . round(floatval($distanceInMinutes) / 525600) . ' years';
}
?>
Jeremiah Peterson
19-Aug-2008 04:55
19-Aug-2008 04:55
I took a different approach to a time difference. The current functions provided to not account for the different number of days in a month.
I have included a function that will calculate the start dates month and the number of days in each month thereafter. There are two things that I have
not yet taken into account. One is daylight savings time and the other is leap year. Perhaps someone can add that to this code.
function num_months($mon_start, $months, $work) {
while($work > 2419200) {
switch($mon_start) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if($work > 2678400) {
$work = $work - 2678400;
$mon_start++;
$months++;
} else {
$exit = 1;
}
break;
case 12:
if($work > 2678400) {
$work = $work - 2678400;
$mon_start = 1;
$months++;
} else {
$exit = 1;
}
break;
case 2:
$work = $work - 2419200;
$mon_start++;
$months++;
break;
case 4:
case 6:
case 9:
case 11:
if($work > 2592000) {
$work = $work - 2592000;
$mon_start++;
$months++;
} else {
$exit = 1;
}
break;
}
if($exit == 1) {
break;
}
}
return Array($months,$work);
}
$month_start = 9;
$day_start = 18;
$year_start = 2007;
$hour_start = 17;
$min_start = 25;
$sec_start = 0;
$start = gmmktime($hour_start,$min_start,$sec_start,
$month_start,$day_start,$year_start);
$yys = (365*24*60*60);
$wks = (7*24*60*60);
$dys = (24*60*60);
$hrs = (60*60);
$mns = (60);
$now = time();
$diff = $now - $start;
$work = $diff;
$years = (int)($work / $yys);
$work = $work - $years*$yys;
$total_years = pstr($years,"year",0);
$months = 0;
list($months, $work) = num_months($month_start, $months, $work);
$total_months = pstr($months,"month",0);
$weeks = (int)($work / $wks);
$work = $work - $weeks*$wks;
$total_weeks = pstr($weeks,"week",0);
$days = (int)($work / $dys);
$work = $work - $days*$dys;
$total_days = pstr($days,"day",0);
$hours = (int)($work / $hrs);
$work = $work - $hours*$hrs;
$total_hours = pstr($hours,"hour",0);
$mins = (int)($work / $mns);
$work = $work - $mins*$mns;
$total_mins = pstr($mins,"minute",0);
$secs = $work;
$total_secs = pstr($secs,"second",".");
print "Difference is $total_years $total_months $total_weeks
$total_days $total_hours $total_mins $total_secs.<br />";
?>
delgado dot enrique at gmail dot com
18-Aug-2008 04:34
18-Aug-2008 04:34
Remember to remove "$this->" from the wrapper function below if you are not placing both functions below within the same class.
delgado dot enrique at gmail dot com
15-Aug-2008 11:46
15-Aug-2008 11:46
So I was looking for an equivalent of Ruby on Rails time_ago_in_words function. I found the TimeAgo function in the comments here, but it doesn't quite behave like the Rails counterpart.
In case you are looking or it as well, I've ported the Ruby code into PHP. Unfortunately, it doesn't look as clean as its Ruby counterpart, but it works the same:
<?php
/*
* PHP port of Ruby on Rails famous distance_of_time_in_words method.
* See http://api.rubyonrails.com/classes/ActionView/Helpers/DateHelper.html for more details.
*
* Reports the approximate distance in time between two timestamps. Set include_seconds
* to true if you want more detailed approximations.
*
*/
function distanceOfTimeInWords($from_time, $to_time = 0, $include_seconds = false) {
$distance_in_minutes = round(abs($to_time - $from_time) / 60);
$distance_in_seconds = round(abs($to_time - $from_time));
if ($distance_in_minutes >= 0 and $distance_in_minutes <= 1) {
if (!$include_seconds) {
return ($distance_in_minutes == 0) ? 'less than a minute' : '1 minute';
} else {
if ($distance_in_seconds >= 0 and $distance_in_seconds <= 4) {
return 'less than 5 seconds';
} elseif ($distance_in_seconds >= 5 and $distance_in_seconds <= 9) {
return 'less than 10 seconds';
} elseif ($distance_in_seconds >= 10 and $distance_in_seconds <= 19) {
return 'less than 20 seconds';
} elseif ($distance_in_seconds >= 20 and $distance_in_seconds <= 39) {
return 'half a minute';
} elseif ($distance_in_seconds >= 40 and $distance_in_seconds <= 59) {
return 'less than a minute';
} else {
return '1 minute';
}
}
} elseif ($distance_in_minutes >= 2 and $distance_in_minutes <= 44) {
return $distance_in_minutes . ' minutes';
} elseif ($distance_in_minutes >= 45 and $distance_in_minutes <= 89) {
return 'about 1 hour';
} elseif ($distance_in_minutes >= 90 and $distance_in_minutes <= 1439) {
return 'about ' . round(floatval($distance_in_minutes) / 60.0) . ' hours';
} elseif ($distance_in_minutes >= 1440 and $distance_in_minutes <= 2879) {
return '1 day';
} elseif ($distance_in_minutes >= 2880 and $distance_in_minutes <= 43199) {
return 'about ' . round(floatval($distance_in_minutes) / 1440) . ' days';
} elseif ($distance_in_minutes >= 43200 and $distance_in_minutes <= 86399) {
return 'about 1 month';
} elseif ($distance_in_minutes >= 86400 and $distance_in_minutes <= 525599) {
return round(floatval($distance_in_minutes) / 43200) . ' months';
} elseif ($distance_in_minutes >= 525600 and $distance_in_minutes <= 1051199) {
return 'about 1 year';
} else {
return 'over ' . round(floatval($distance_in_minutes) / 525600) . ' years';
}
?>
Additionally, here is the wrapper function:
<?php
/*
* Like distanceOfTimeInWords, but where to_time is fixed to the output of time()
*
*/
function timeAgoInWords($from_time, $include_seconds = false) {
return $this->distanceOfTimeInWords($from_time, time(), $include_seconds);
}
?>
Michael Konecny
17-Jul-2008 07:06
17-Jul-2008 07:06
It should be noted in the example, that time() + (7*24*60*60) and strtotime("+1 week") do not always generate the same timestamp. The problem occurs when the daylight saving time changes.
Therefore it's usually better to use strtotime..
Example:
the last time the time changed in the Czech republic was on the 30th March 2008, from 2:00 to 3:00.
Assume it is Wednesday, the 26th March 2008, 23:59.
If you call
<?php echo date("l, jS F Y, H:i",strtotime("+1 week")); ?>
you get Wednesday, 2nd April 2008, 23:59, as you would predict,
although if you try
<?php echo date("l, jS F Y, H:i",time()+(7*24*60*60)); ?>
you get Thursday, 3rd April 2008, 00:59. Here's where things might get a bit confusing, if you don't expect it!
Suddenly you find the food list for the next week is gone :D !
Santosh Patnaik
01-Jun-2008 08:06
01-Jun-2008 08:06
This function formats an elapsed time or a time-difference value by distributing the value in seconds in to years, months, weeks, etc. (akin to using varying numbers of currency notes and coins of different denominations for the same amount of money)
<?php
/*
* Formatted time-difference between $t1 and $t2 (seconds)
* The difference in seconds is distributed into years, months, etc. as specified by $format.
* $format is a string containing characters y, f, w, d, h, m or s, for years, months, weeks, days, hours, minutes or seconds, resp.
* Output is an array containing keys y, f, etc., with the numerical values.
* Values are negative if $t1 is more than $t2.
*/
function FormatTimeDiff($t1, $t2=null, $format='yfwdhms'){
$t2 = $t2 === null ? time() : $t2;
$s = abs($t2 - $t1);
$sign = $t2 > $t1 ? 1 : -1;
$out = array();
$left = $s;
$format = array_unique(str_split(preg_replace('`[^yfwdhms]`', '', strtolower($format))));
$format_count = count($format);
$a = array('y'=>31556926, 'f'=>2629744, 'w'=>604800, 'd'=>86400, 'h'=>3600, 'm'=>60, 's'=>1);
$i = 0;
foreach($a as $k=>$v){
if(in_array($k, $format)){
++$i;
if($i != $format_count){
$out[$k] = $sign * (int)($left / $v);
$left = $left % $v;
}else{
$out[$k] = $sign * ($left / $v);
}
}else{
$out[$k] = 0;
}
}
return $out;
}
print_r(FormatTimeDiff(1, 86402));
print_r(FormatTimeDiff(1, 86402, 'hms')); // distribute into hours, minutes and seconds only
print_r(FormatTimeDiff(1, 86402, 'ds')); // distribute into days and minutes only
print_r(FormatTimeDiff(86402, 1, 'm')); // distribute into only minutes
/*
Output:
Array([y]=>0 [f]=>0 [w]=>0 [d]=>1 [h]=> 0 [m]=>0 [s]=>1)
Array([y]=>0 [f]=>0 [w]=>0 [d]=>0 [h]=>24 [m]=>0 [s]=>1)
Array([y]=>0 [f]=>0 [w]=>0 [d]=>1 [h]=> 0 [m]=>0 [s]=>1)
Array([y]=>0 [f]=>0 [w]=>0 [d]=>0 [h]=> 0 [m]=>-1440.01666667 [s]=>0)
*/
?>
south dot minds at gmail dot com
16-May-2008 06:09
16-May-2008 06:09
Format seconds (if less or equal to 86400) into hours, minutes and seconds ± 1 sec. Change $time and $myLocale to whatever your want and test from CLI (bash - linux) with
t=''; for i in $(seq 1 20); do t=$t"\n"$(php -f seconds2time.php) ; done ; echo -e "$t" | sort -n
<?php
$time = mt_rand(0,86400);
$myLocale = "es_AR";
setlocale(LC_ALL,$myLocale);
$localeconv = localeconv();
$dec_point =$localeconv['decimal_point'];
($time > 86400) ? die("Time must be less than 86400 seconds") : '';
if($time % 3600 == 0){
$t_h[0] = $time/3600;
$t_m[0] = 0;
$t_s[0] = 0;
}else if ($time >= 3600 && ($time % 60) == 0 ){
$t_h = explode($dec_point,$time / 3600);
$t_m = explode($dec_point,('0.'.$t_h[1]) * 3600 / 60);
$t_s[0] = 0;
}else if($time < 3600 && ($time % 60) == 0 ){
$t_h[0] = 0;
$t_m = explode($dec_point,$time/ 60);
$t_s[0] = 0;
}else{
$t_h = explode($dec_point,$time / 3600);
$t_m = explode($dec_point,('0.'.$t_h[1]) * 3600 / 60);
$t_s[0] = ceil(('0.'.$t_m[1]) * 60);
}
print sprintf('%05d',$time) .' = ' . sprintf('%02d',$t_h[0]). ' hs. '. sprintf('%02d',$t_m[0]) . ' min. ' .sprintf('%02d',$t_s[0]) ." seg. \n";
?>
binupillai2003 at yahoo dot com
03-Apr-2008 08:10
03-Apr-2008 08:10
Calculate time difference(24 hours system)
<?php
//Author Binu.v.Pillai
function diffTime($bigTime,$smallTime)
{
//input format hh:mm:ss
list($h1,$m1,$s1)=split(":",$bigTime);
list($h2,$m2,$s2)=split(":",$smallTime);
$second1=$s1+($h1*3600)+($m1*60);//converting it into seconds
$second2=$s2+($h2*3600)+($m2*60);
if ($second1==$second2)
{
$resultTime="00:00:00";
return $resultTime;
exit();
}
if ($second1<$second2) //
{
$second1=$second1+(24*60*60);//adding 24 hours to it.
}
$second3=$second1-$second2;
//print $second3;
if ($second3==0)
{
$h3=0;
}
else
{
$h3=floor($second3/3600);//find total hours
}
$remSecond=$second3-($h3*3600);//get remaining seconds
if ($remSecond==0)
{
$m3=0;
}
else
{
$m3=floor($remSecond/60);// for finding remaining minutes
}
$s3=$remSecond-(60*$m3);
if($h3==0)//formating result.
{
$h3="00";
}
if($m3==0)
{
$m3="00";
}
if($s3==0)
{
$s3="00";
}
$resultTime="$h3:$m3:$s3";
return $resultTime;
}
?>
rana_0036 at yahoo dot com
17-Mar-2008 08:03
17-Mar-2008 08:03
Here some example i have implemented. I think it will be helpful someone.
<?php
function fullDateFormat( $value ){
$d = explode("-", $value);
$cdate = date ("F j, Y", mktime (0,0,0,$d[1],$d[2],$d[0]));
echo $cdate;
}
//-----Enter date format like mysql date (e.g. 2000-01-30)------//
fullDateFormat("2008-03-17");
function detailsDateFormat( $value ){
$d = explode("-", $value);
$cdate = date ("l F j, Y", mktime (0,0,0,$d[1],$d[2],$d[0]));
echo $cdate;
}
//-----Enter date format like mysql date (e.g. 2000-01-30)------//
detailsDateFormat("2008-03-17");
?>
miguelangeldavila at yahoo dot com dot mx
24-Dec-2007 07:50
24-Dec-2007 07:50
PHP is affected by the Y2K38 bug.
<?php
$current_time = time();
$years_from_now = 50;
$remaining_seconds = 60 * 60 * 24 * 365 * $years_from_now;
$future_unix_time = $current_time + $remaining_seconds;
$future_date = date('Y-m-d', $future_unix_time);
echo $future_date;
// 1921-11-05
?>
It is caused because the PHP uses the C 32 bits time function
stack-phpnotes at landstander dot com
23-Oct-2007 02:31
23-Oct-2007 02:31
My modification and enhancements to the timeDiff() function last updated by sean sullivan. The rewrite was done to add a couple new optional parameters but I also got a bump in performance. On a completely personal preference level I changed the month and year second values with ones I got from Google searches.
Written and tested with 5.2.0.
Options include
to = time(); date to compute the range to
parts = 1; number of parts to display max
precision = 'second'; lowest part to compute to
distance = TRUE; include the 'ago' or 'away' bit
separator = ', '; separates the parts
<?php
function timeDiff($time, $opt = array()) {
// The default values
$defOptions = array(
'to' => 0,
'parts' => 1,
'precision' => 'second',
'distance' => TRUE,
'separator' => ', '
);
$opt = array_merge($defOptions, $opt);
// Default to current time if no to point is given
(!$opt['to']) && ($opt['to'] = time());
// Init an empty string
$str = '';
// To or From computation
$diff = ($opt['to'] > $time) ? $opt['to']-$time : $time-$opt['to'];
// An array of label => periods of seconds;
$periods = array(
'decade' => 315569260,
'year' => 31556926,
'month' => 2629744,
'week' => 604800,
'day' => 86400,
'hour' => 3600,
'minute' => 60,
'second' => 1
);
// Round to precision
if ($opt['precision'] != 'second')
$diff = round(($diff/$periods[$opt['precision']])) * $periods[$opt['precision']];
// Report the value is 'less than 1 ' precision period away
(0 == $diff) && ($str = 'less than 1 '.$opt['precision']);
// Loop over each period
foreach ($periods as $label => $value) {
// Stitch together the time difference string
(($x=floor($diff/$value))&&$opt['parts']--) && $str.=($str?$opt['separator']:'').($x.' '.$label.($x>1?'s':''));
// Stop processing if no more parts are going to be reported.
if ($opt['parts'] == 0 || $label == $opt['precision']) break;
// Get ready for the next pass
$diff -= $x*$value;
}
$opt['distance'] && $str.=($str&&$opt['to']>$time)?' ago':' away';
return $str;
}
?>
Usage:
$span = timeDiff($when);
or
$span = timeDiff($when, array('parts' => 3));
Josh Abraham
28-Sep-2007 05:43
28-Sep-2007 05:43
When dealing with the results of the time function, taking the modulus (remainder) is often a good way to find recurring information such as day of the week, week of the year, or month of the year. In the example given below of a firefighter's shift, you could do the following to simplify the code.
<?php
function whatShift() {
$referencePoint = mktime(7, 0, 0, 9, 11, 2004); // Sept 11, 2004 at 7AM started an A Shift.
//This is the where we divide the current time since reference by the amount of time in all shifts
//The result of this is the remainder.
$sinceReference = (time() - $referencePoint) % (60 * 60 * 24 * 3);
//The rest of the code can be basically the same so I shortened it here.
if ($sinceReference < 60 * 60 * 25) $shift = "A";
elseif ($sinceReference < 60 * 60 * 49) $shift = "B";
else $shift = "C";
return $shift;
}
?>
jon at freilich dot com
21-Sep-2007 07:30
21-Sep-2007 07:30
Fire Fighters typically work one day on and two days off. Known as shifts and generally referred to as A, B and C. I need to compute this for a web script so I came up with the following function.
Notes: You may need to change the reference date as not all departments are on the same rotation. Also, this does not take into account daylight savings time so the changeover moves by an hour.
<?php
function whatShift() {
$referencePoint = mktime(7, 0, 0, 9, 11, 2004); // Sept 11, 2004 at 7AM started an A Shift.
$now = time();
// Next we need to know how many seconds since the start of the last A Shift.
// First we compute how many 3 days cycles since the reference point then
// subtract that number.
$difference = ($now - $referencePoint);
$cycles = floor($difference / (60 * 60 * 24 * 3));
$sinceReference = ($difference - ($cycles * 60 * 60 * 24 * 3));
if ($sinceReference < 60 * 60 * 25) { // Before the start of the 25th hour it's A Shift.
$shift = "A";
}
elseif ($sinceReference < 60 * 60 * 49) { // Else before the start of the 49th hour it's B Shift.
$shift = "B";
}
else {
$shift = "C"; // Else it's C Shift.
}
return $shift;
}
?>
kobieta dot ryba at gmail dot com
12-Sep-2007 02:23
12-Sep-2007 02:23
Time left function:
<?php
define("TIME_PERIODS_PLURAL_SINGULAR", "weeks:week,years:year,days:day,hours:hour, : ,minutes:minute,seconds:second");
DEFINE("TIME_LEFT_STRING_TPL", " #num# #period#");
/**
* @param $time time stamp
**/
function time_left($time)
{
if (($now = time()) <= $time) return false;
$timeRanges = array('years' => 365*60*60*24,/* 'weeks' => 60*60*24*7, */ 'days' => 60*60*24, 'hours' => 60*60, 'minutes' => 60, 'seconds' => 1);
$secondsLeft = $now-$time;
// prepare ranges
$outRanges = array();
foreach ($timeRanges as $period => $sec)
if ($secondsLeft/$sec >= 1)
{
$outRanges[$period] = floor($secondsLeft/$sec);
$secondsLeft -= ($outRanges[$period] * $sec);
}
// playing with TIME_PERIODS_PLURAL_SINGULAR
$periodsEx = explode(",", TIME_PERIODS_PLURAL_SINGULAR);
$periodsAr = array();
foreach ($periodsEx as $periods)
{
$ex = explode(":", $periods);
$periodsAr[$ex[0]] = array('plural' => $ex[0], 'singular' => $ex[1]);
}
// string out
$outString = "";
$outStringAr = array();
foreach ($outRanges as $period => $num)
{
$per = $periodsAr[$period]['plural'];
if ($num == 1) $per = $periodsAr[$period]['singular'];
$outString .= $outStringAr[$period] = str_replace(array("#num#", "#period#"), array($num, $per), TIME_LEFT_STRING_TPL);
}
return array('timeRanges' => $outRanges, 'leftStringAr' => $outStringAr, 'leftString' => $outString);
}
print_r(time_left(time()-60*60*24*365+59));
?>
Output:
Array
(
[timeRanges] => Array
(
[days] => 364
[hours] => 23
[minutes] => 59
[seconds] => 1
)
[leftStringAr] => Array
(
[days] => 364 days
[hours] => 23 hours
[minutes] => 59 minutes
[seconds] => 1 second
)
[leftString] => 364 days 23 hours 59 minutes 1 second
)
by225 at yahoo dot com
06-Sep-2007 10:32
06-Sep-2007 10:32
A function for converting to Unix time without using the MySQL UNIX_TIMESTAMP function in a query (MySQL allows eight different formats for timestamps):
<?php
function UnixTime($mysql_timestamp){
if (preg_match('/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', $mysql_timestamp, $pieces)
|| preg_match('/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', $mysql_timestamp, $pieces)) {
$unix_time = mktime($pieces[4], $pieces[5], $pieces[6], $pieces[2], $pieces[3], $pieces[1]);
} elseif (preg_match('/\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/', $mysql_timestamp)
|| preg_match('/\d{2}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/', $mysql_timestamp)
|| preg_match('/\d{4}\-\d{2}\-\d{2}/', $mysql_timestamp)
|| preg_match('/\d{2}\-\d{2}\-\d{2}/', $mysql_timestamp)) {
$unix_time = strtotime($mysql_timestamp);
} elseif (preg_match('/(\d{4})(\d{2})(\d{2})/', $mysql_timestamp, $pieces)
|| preg_match('/(\d{2})(\d{2})(\d{2})/', $mysql_timestamp, $pieces)) {
$unix_time = mktime(0, 0, 0, $pieces[2], $pieces[3], $pieces[1]);
}
return $unix_time;
}
?>
lsd25 at hotmail dot com
01-Sep-2007 05:53
01-Sep-2007 05:53
I did an article on floating point time you can download from my website. Roun movements is the radial ounion movement and there is a quantum ounion movement as well, this code will generate the data for http://www.chronolabs.org.au/bin/roun-time-article.pdf which is an article on floating point time, I have created the calendar system as well for this time. It is compatible with other time and other solar systems with different revolutions of the planets as well as different quantumy stuff.
Thanks:
<?php
if ($gmt>0){
$gmt=-$gmt;
} else {
$gmt=$gmt+$gmt+$gmt;
}
$ptime = strtotime('2008-05-11 10:05 AM')+(60*60*gmt);
$weight = -20.22222222223+(1*gmt);
$roun_xa = ($tme)/(24*60*60);
$roun_ya = $ptime/(24*60*60);
$roun = (($roun_xa -$roun_ya) - $weight)+(microtime/999999);
$nonedeficient = array("seq1" => array(31,30,31,30,30,30,31,30,31,30,31,30),
"seq2" => array(31,30,31,30,31,30,31,30,31,30,31,30),
"seq3" => array(31,30,31,30,30,30,31,30,31,30,31,30),
"seq4" => array(31,30,31,30,30,30,31,30,31,30,31,30));
$deficient = array("seq1" => array(31,30,31,30,30,30,31,30,31,30,31,30),
"seq2" => array(31,30,31,30,31,30,31,30,31,30,31,30),
"seq3" => array(31,30,31,30,31,30,31,30,30,30,31,30),
"seq4" => array(30,30,31,30,31,30,31,30,31,30,31,30));
$monthusage = isset($_GET['deficienty']) ? ${$_GET['deficienty']} : $deficient;
foreach($monthusage as $key => $item){
$i++;
foreach($item as $numdays){
$ttl_num=$ttl_num+$numdays;
}
}
$revolutionsperyear = $ttl_num / $i;
$numyears = round((round(ceil($roun)) / $revolutionsperyear),0);
$jtl = abs(abs($roun) - ceil($revolutionsperyear*($numyears+1)));
while($month==0){
$day=0;
foreach($monthusage as $key => $item){
$t++;
$u=0;
foreach($item as $numdays){
if ($ii<abs($roun)){
$isbelow=true;
}
$ii=$ii+$numdays;
if ($ii>abs($roun)){
$isabove=true;
}
if ($isbelow==true&&$isabove==true){
$daynum = floor(($ii-$numday)-abs($roun));
$month = $u;
$month++;
$isbelow=false;
$isabove=false;
$nodaycount=true;
}
if ($nodaycount==false)
$day++;
$u++;
}
}
}
$timer = substr($roun, strpos($roun,'.')+1,strlen($roun)-strpos($roun,'.')-1);
$roun_out= $numyears.'-'.$month.'-'.$daynum.' '.$day.".$timer";
?>
Sean Sullivan
28-Jul-2007 10:51
28-Jul-2007 10:51
Fixed divide by zero warnings given by the timeDiff function. The change is that the for loop doesn't count down to 0 anymore, just 1. I dont think it has any side effects.
<?php
# max_detail_levels - how deep to go down? If max_detail_levels is set to 2, text will output something like "3 days 4 hours" instead of "3 days 4 hours 10 minutes 55 seconds"
# precision_level - this is what rspenc29 was trying to accomplish. If you want to only report a minimum value of say 1 hour, then you should set this to "hour"
function timeDiff($timestamp,$detailed=false, $max_detail_levels=8, $precision_level='second'){
$now = time();
#If the difference is positive "ago" - negative "away"
($timestamp >= $now) ? $action = 'away' : $action = 'ago';
# Set the periods of time
$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
$lengths = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600);
$diff = ($action == 'away' ? $timestamp - $now : $now - $timestamp);
$prec_key = array_search($precision_level,$periods);
# round diff to the precision_level
$diff = round(($diff/$lengths[$prec_key]))*$lengths[$prec_key];
# if the diff is very small, display for ex "just seconds ago"
if ($diff <= 10) {
$periodago = max(0,$prec_key-1);
$agotxt = $periods[$periodago].'s';
return "just $agotxt $action";
}
# Go from decades backwards to seconds
$time = "";
for ($i = (sizeof($lengths) - 1); $i>0; $i--) {
if($diff > $lengths[$i-1] && ($max_detail_levels > 0)) { # if the difference is greater than the length we are checking... continue
$val = floor($diff / $lengths[$i-1]); # 65 / 60 = 1. That means one minute. 130 / 60 = 2. Two minutes.. etc
$time .= $val ." ". $periods[$i-1].($val > 1 ? 's ' : ' '); # The value, then the name associated, then add 's' if plural
$diff -= ($val * $lengths[$i-1]); # subtract the values we just used from the overall diff so we can find the rest of the information
if(!$detailed) { $i = 0; } # if detailed is turn off (default) only show the first set found, else show all information
$max_detail_levels--;
}
}
# Basic error checking.
if($time == "") {
return "Error-- Unable to calculate time.";
} else {
return $time.$action;
}
}
?>
[EDIT by danbrown AT php DOT net: Modifications from the original below up to this version were deleted from the user notes. The following people contributed bug fixes and code to reach this version:
shdowhawk at gmail dot com
nimit dot maru at dontspam-gmail dot com
rspenc29 at gmail dot com
sunjith
ron at sdcausa dot org
Credit for this function is due to the above authors in addition to the authors of the original and final version.
joncampell at gmail dot com
08-May-2007 11:07
08-May-2007 11:07
Time difference both forward and backward, based on tristan's TimeAgo() function :)
<?php
function timeDiff($timestamp){
$now = time();
//If the difference is positive "ago" - negative "away"
($timestamp >= $now) ? $action = 'away' : $action = 'ago';
switch($action) {
case 'away':
$diff = $timestamp - $now;
break;
case 'ago':
default:
// Determine the difference, between the time now and the timestamp
$diff = $now - $timestamp;
break;
}
// Set the periods of time
$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
// Set the number of seconds per period
$lengths = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600);
// Go from decades backwards to seconds
for ($val = sizeof($lengths) - 1; ($val >= 0) && (($number = $diff / $lengths[$val]) <= 1); $val--);
// Ensure the script has found a match
if ($val < 0) $val = 0;
// Determine the minor value, to recurse through
$new_time = $now - ($diff % $lengths[$val]);
// Set the current value to be floored
$number = floor($number);
// If required create a plural
if($number != 1) $periods[$val].= "s";
// Return text
$text = sprintf("%d %s ", $number, $periods[$val]);
return $text . $action;
}
?>
If anyone knows of an easier way to do this, please comment.
jason at thinkingman dot org
26-Apr-2007 07:58
26-Apr-2007 07:58
Here you go. You can specify how much you wanna see -- years, weeks, days, hours, minutes or seconds. Returns an Array containing a String along with the individual time values.
Usage:
array calc_tl( int $unixTime, [int $unixTime], [char $selector] )
<?php
function calc_tl($t, $sT = 0, $sel = 'Y') {
$sY = 31536000;
$sW = 604800;
$sD = 86400;
$sH = 3600;
$sM = 60;
if($sT) {
$t = ($sT - $t);
}
if($t <= 0) {
$t = 0;
}
$bs[1] = ('1'^'9'); /* Backspace */
switch(strtolower($sel)) {
case 'y':
$y = ((int)($t / $sY));
$t = ($t - ($y * $sY));
$r['string'] .= "{$y} years{$bs[$y]} ";
$r['years'] = $y;
case 'w':
$w = ((int)($t / $sW));
$t = ($t - ($w * $sW));
$r['string'] .= "{$w} weeks{$bs[$w]} ";
$r['weeks'] = $w;
case 'd':
$d = ((int)($t / $sD));
$t = ($t - ($d * $sD));
$r['string'] .= "{$d} days{$bs[$d]} ";
$r['days'] = $d;
case 'h':
$h = ((int)($t / $sH));
$t = ($t - ($h * $sH));
$r['string'] .= "{$h} hours{$bs[$h]} ";
$r['hours'] = $h;
case 'm':
$m = ((int)($t / $sM));
$t = ($t - ($m * $sM));
$r['string'] .= "{$m} minutes{$bs[$m]} ";
$r['minutes'] = $m;
case 's':
$s = $t;
$r['string'] .= "{$s} seconds{$bs[$s]} ";
$r['seconds'] = $s;
break;
default:
return calc_tl($t);
break;
}
return $r;
}
// A few exaggerated examples:
$startTime = time();
$stopTime = mktime(23,59,59,12,31,2011);
$tY = calc_tl($startTime, $stopTime, 'Y'); // Years (default)
$tD = calc_tl($startTime, $stopTime, 'D'); // Days
$tH = calc_tl($startTime, $stopTime, 'H'); // Hours
print_r($tY);
print_r($tD);
print_r($tH);
?>
OUTPUT
Array
(
[string] => 4 years 35 weeks 6 days 4 hours 54 minutes 33 seconds
[years] => 4
[weeks] => 35
[days] => 6
[hours] => 4
[minutes] => 54
[seconds] => 33
)
Array
(
[string] => 1711 days 4 hours 54 minutes 33 seconds
[days] => 1711
[hours] => 4
[minutes] => 54
[seconds] => 33
)
Array
(
[string] => 41068 hours 54 minutes 33 seconds
[hours] => 41068
[minutes] => 54
[seconds] => 33
)
webmaster[at]auscoder[dot]com
25-Apr-2007 05:36
25-Apr-2007 05:36
In a recent object I had to calculate the time difference between timestamps in a string format, so I wrote this nice little function I'd like to share.
<?php
define('INT_SECOND', 1);
define('INT_MINUTE', 60);
define('INT_HOUR', 3600);
define('INT_DAY', 86400);
define('INT_WEEK', 604800);
function get_formatted_timediff($then, $now = false)
{
$now = (!$now) ? time() : $now;
$timediff = ($now - $then);
$weeks = (int) intval($timediff / INT_WEEK);
$timediff = (int) intval($timediff - (INT_WEEK * $weeks));
$days = (int) intval($timediff / INT_DAY);
$timediff = (int) intval($timediff - (INT_DAY * $days));
$hours = (int) intval($timediff / INT_HOUR);
$timediff = (int) intval($timediff - (INT_HOUR * $hours));
$mins = (int) intval($timediff / INT_MINUTE);
$timediff = (int) intval($timediff - (INT_MINUTE * $mins));
$sec = (int) intval($timediff / INT_SECOND);
$timediff = (int) intval($timediff - ($sec * INT_SECOND));
$str = '';
if ( $weeks )
{
$str .= intval($weeks);
$str .= ($weeks > 1) ? ' weeks' : ' week';
}
if ( $days )
{
$str .= ($str) ? ', ' : '';
$str .= intval($days);
$str .= ($days > 1) ? ' days' : ' day';
}
if ( $hours )
{
$str .= ($str) ? ', ' : '';
$str .= intval($hours);
$str .= ($hours > 1) ? ' hours' : ' hour';
}
if ( $mins )
{
$str .= ($str) ? ', ' : '';
$str .= intval($mins);
$str .= ($mins > 1) ? ' minutes' : ' minute';
}
if ( $sec )
{
$str .= ($str) ? ', ' : '';
$str .= intval($sec);
$str .= ($sec > 1) ? ' seconds' : ' second';
}
if ( !$weeks && !$days && !$hours && !$mins && !$sec )
{
$str .= '0 seconds ago';
}
else
{
$str .= ' ago';
}
return $str;
}
?>
greg at mix.lycos.com
24-Apr-2007 10:46
24-Apr-2007 10:46
I found Craig's code useful, but wanted the ability to limit the granularity to only show most significant time periods. there's the bit I adapted:
<?php
function ago ( $epoch, $max_phrases=null ) {
$duration = time() - $epoch;
return seconds2human( $duration > 0 ? $duration : 0,
$max_phrases) . " ago";
}
function seconds2human($epoch, $max_phrases=null ){
// kindly adapted from Craig Francis at http://www.php.net/manual/en/function.time.php#74652
//--------------------------------------------------
// Maths
$sec = $epoch % 60;
$epoch -= $sec;
$minSeconds = $epoch % 3600;
$epoch -= $minSeconds;
$min = ($minSeconds / 60);
$hourSeconds = $epoch % 86400;
$epoch -= $hourSeconds;
$hour = ($hourSeconds / 3600);
$daySeconds = $epoch % 604800;
$epoch -= $daySeconds;
$day = ($daySeconds / 86400);
$week = ($epoch / 604800);
//--------------------------------------------------
// Text
$output = array();
if ($week > 0) {
$output[] = $week . ' week' . ($week != 1 ? 's' : '');
}
if ($day > 0) {
$output[] = $day . ' day' . ($day != 1 ? 's' : '');
}
if ($hour > 0) {
$output[] = $hour . ' hour' . ($hour != 1 ? 's' : '');
}
if ($min > 0) {
$output[] = $min . ' minute' . ($min != 1 ? 's' : '');
}
if ($sec > 0 || $output == '') {
$output[] = $sec . ' second' . ($sec != 1 ? 's' : '');
}
//--------------------------------------------------
// Grammar
if( isset($max_phrases) )
$output = array_slice($output, 0, $max_phrases);
$return = join( ', ', $output);
$return = preg_replace('/, ([^,]+)$/', ' and $1', $return);
//--------------------------------------------------
// Return the output
return $return;
}
?>
john at motdidr dot com
13-Mar-2007 01:01
13-Mar-2007 01:01
did a quick test comparing time() with date("U"), using 100,000 iterations. Granted, I did this on a 2.4GHz Celeron... the results should still stand.
time() (100000) : 0.0589900016785
date("U") (100000) : 22.246557951
jh2000 at root24 dot eu
25-Feb-2007 10:08
25-Feb-2007 10:08
Just a small notice:
use the time() function instead of date("U"), it is much faster (about 1000 times~)
tristan at trinicle dot net
23-Nov-2006 12:10
23-Nov-2006 12:10
Initially I was using Andrew's function to convert a timestamp into a formatted age. It has issues with times greater than a day (div by 0). I also added recursion to produce a result similar to "2 decades 6 months 3 weeks 2 days 6 hours 56 minutes 52 seconds" when input a timestamp from 1986. Hopefully someone will find this useful.
<?php
public static function TimeAgo($timestamp){
// Store the current time
$current_time = time();
// Determine the difference, between the time now and the timestamp
$difference = $current_time - $timestamp;
// Set the periods of time
$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
// Set the number of seconds per period
$lengths = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600);
// Determine which period we should use, based on the number of seconds lapsed.
// If the difference divided by the seconds is more than 1, we use that. Eg 1 year / 1 decade = 0.1, so we move on
// Go from decades backwards to seconds
for ($val = sizeof($lengths) - 1; ($val >= 0) && (($number = $difference / $lengths[$val]) <= 1); $val--);
// Ensure the script has found a match
if ($val < 0) $val = 0;
// Determine the minor value, to recurse through
$new_time = $current_time - ($difference % $lengths[$val]);
// Set the current value to be floored
$number = floor($number);
// If required create a plural
if($number != 1) $periods[$val].= "s";
// Return text
$text = sprintf("%d %s ", $number, $periods[$val]);
// Ensure there is still something to recurse through, and we have not found 1 minute and 0 seconds.
if (($val >= 1) && (($current_time - $new_time) > 0)){
$text .= self::TimeAgo($new_time);
}
return $text;
}
?>
andrew dot macrobert at gmail dot com
30-Oct-2006 12:33
30-Oct-2006 12:33
An improved version of my previous function:
<?php
function ago($timestamp){
$difference = time() - $timestamp;
$periods = array("second", "minute", "hour", "day", "week", "month", "years", "decade");
$lengths = array("60","60","24","7","4.35","12","10");
for($j = 0; $difference >= $lengths[$j]; $j++)
$difference /= $lengths[$j];
$difference = round($difference);
if($difference != 1) $periods[$j].= "s";
$text = "$difference $periods[$j] ago";
return $text;
}
?>
andrew dot macrobert at gmail dot com
22-Oct-2006 09:47
22-Oct-2006 09:47
This function takes a timestamp and returns how long ago it was, in seconds, minutes, hours, days, or weeks (it will return it in minutes if it was >= than 60 seconds ago, hours if it was >= 60 minutes, etc.).
<?php
function ago($timestamp){
$difference = time() - $timestamp;
if($difference < 60)
return $difference." seconds ago";
else{
$difference = round($difference / 60);
if($difference < 60)
return $difference." minutes ago";
else{
$difference = round($difference / 60);
if($difference < 24)
return $difference." hours ago";
else{
$difference = round($difference / 24);
if($difference < 7)
return $difference." days ago";
else{
$difference = round($difference / 7);
return $difference." weeks ago";
}
}
}
}
}
?>
krisdover at hotmail dot com
09-Sep-2006 07:54
09-Sep-2006 07:54
# a simple html/php formatted calendar which returns
# the date as a unix timestamp when the required day
# is selected. Also allows for setting of time in 24hr format
# kris dover, 2006-09-09
<?php
$sel_date = isset($_REQUEST['sel_date']) ? $_REQUEST['sel_date'] : time();
if( isset($_POST['hrs']) ){
$t = getdate($sel_date);
$sel_date = mktime($_POST['hrs'], $_POST['mins'], $t['seconds'], $t['mon'], $t['mday'], $t['year']);
}
$t = getdate($sel_date);
$start_date = mktime($t['hours'], $t['minutes'], $t['seconds'], $t['mon'], 1, $t['year']);
$start_date -= 86400 * date('w', $start_date);
$prev_year = mktime($t['hours'], $t['minutes'], $t['seconds'], $t['mon'], $t['mday'], $t['year'] - 1);
$prev_month = mktime($t['hours'], $t['minutes'], $t['seconds'], $t['mon'] - 1, $t['mday'], $t['year']);
$next_year = mktime($t['hours'], $t['minutes'], $t['seconds'], $t['mon'], $t['mday'], $t['year'] + 1);
$next_month = mktime($t['hours'], $t['minutes'], $t['seconds'], $t['mon'] + 1, $t['mday'], $t['year']);
?>
<form method="post">
<table width="180" border="0" cellspacing="1"
style="border: 1px solid black; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; text-align: center">
<tr>
<td width="14%" bgcolor="#66FF99">
<a href="?sel_date=<?= $prev_year ?>" style="text-decoration: none" title="Prevous Year"><<</a></td>
<td width="14%" bgcolor="#66FF99">
<a href="?sel_date=<?= $prev_month ?>" style="text-decoration: none" title="Prevous Month"><</a></td>
<td colspan="3" bgcolor="#66FF99">
<?= date('M Y', $sel_date) ?>
</td>
<td width="14%" bgcolor="#66FF99">
<a href="?sel_date=<?= $next_month ?>" style="text-decoration: none" title="Next Month">></a></td>
<td width="14%" bgcolor="#66FF99">
<a href="?sel_date=<?= $next_year ?>" style="text-decoration: none" title="Next Year">>></a></td>
</tr>
<tr>
<td bgcolor="#0099FF">Sun</td>
<td bgcolor="#0099FF">Mon</td>
<td width="14%" bgcolor="#0099FF">Tue</td>
<td width="14%" bgcolor="#0099FF">Wed</td>
<td width="14%" bgcolor="#0099FF">Thu</td>
<td bgcolor="#0099FF">Fri</td>
<td bgcolor="#0099FF">Sat</td>
</tr>
<?php
$day = 1;
for($i = $start_date; $day <= 42; $i+=86400, $day++){
if( $day % 7 == 1 ) echo "<tr>\n";
if( $t['mon'] == date('n', $i ) )
if( $i == $sel_date )
echo ' <td bgcolor="gold">'. date('j', $i) ."</td>\n";
else
echo ' <td><a href="?sel_date='. $i .'" style="text-decoration: none">'. date('j', $i) ."</a></td>\n";
else
echo ' <td ><a href="?sel_date='. $i .'" style="text-decoration: none"><font color="silver">'. date('j', $i) ."</font></a></td>\n";
if( $day % 7 == 0 ) echo "</tr>\n";
}
?>
<tr>
<td colspan="7" align="left" bgcolor="silver">Time:
<select name="hrs" onchange="document.forms[0].submit()">
<?php
for($i = 0; $i < 24; $i++)
echo ' <option '. (date('G', $sel_date)==$i ? 'selected':'') .'>'. sprintf('%02d', $i) ."</option>\n";
?>
</select>:
<select name="mins" onchange="document.forms[0].submit()">
<?php
for($i = 0; $i < 60; $i++)
echo ' <option '. (date('i', $sel_date)==$i ? 'selected':'') .'>'. sprintf('%02d', $i) ."</option>\n";
?>
</select> hrs
<input type="hidden" name="sel_date" value="<?= $sel_date ?>">
</td>
</tr>
</table>
</form>
STaRDoGGCHaMP
21-Jul-2006 09:34
21-Jul-2006 09:34
This function formate a timestamp into days, hours, minutes and seconds.
e.g the time until your birthday.
<?php
function formatetimestamp($until){
$now = time();
$difference = $until - $now;
$days = floor($difference/86400);
$difference = $difference - ($days*86400);
$hours = floor($difference/3600);
$difference = $difference - ($hours*3600);
$minutes = floor($difference/60);
$difference = $difference - ($minutes*60);
$seconds = $difference;
$output = "You have to wait $days Days, $hours Hours, $minutes Minutes and $seconds Seconds until this Day.";
return $output;
}
//int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )
echo formatetimestamp(mktime(0,0,0,12,31,2006)); //output: e.g "You have to wait 162 Days, 4 Hours, 38 Minutes and 46 Seconds until this Day"
?>
send at mail dot 2aj dot net
08-Jun-2006 09:58
08-Jun-2006 09:58
If you want to create a "rounded" time stamp, for example, to the nearest 15 minutes use this as a reference:
<?php
$round_numerator = 60 * 15 // 60 seconds per minute * 15 minutes equals 900 seconds
//$round_numerator = 60 * 60 or to the nearest hour
//$round_numerator = 60 * 60 * 24 or to the nearest day
// Calculate time to nearest 15 minutes!
$rounded_time = ( round ( time() / $round_numerator ) * $round_numerator );
//If it was 12:40 this would return the timestamp for 12:45;
//3:04, 3:00; etc.
?>
info at exitorange dot com
21-Feb-2006 06:11
21-Feb-2006 06:11
in order to get the timestamp of the beginning of the current day (useful for synchronising) just do this:
$time = time();
$start_time = mktime(0, 0, 0, date('m', $time),date('d', $time),date('Y', $time));
emory dot smith at gmail dot com
20-Feb-2006 02:17
20-Feb-2006 02:17
heres another way to convert a mysql timestamp to a unix timestamp without using the function UNIX_TIMESTAMP in mysql:
<?php
$unix_timestamp = strtotime($mysql_timestamp);
?>
aidan at php dot net
08-Oct-2005 03:14
08-Oct-2005 03:14
* A simple function for calculating the number of seconds, minutes, etc in a timestamp is here:
http://aidanlister.com/repos/v/Duration.php
Example:
<?php
$time = 60*60*2 + 20*60 + 5;
// Gives 2 hours, 20 minutes, 5 seconds
echo Duration::toString($time);
?>
* For manipulating arbitrary format, or length timestamps, see the PEAR::Date class.
http://pear.php.net/package/Date/
* PHP 6 will be shipping a new inbuilt date and timestamp manipulation API. It's available on PECL here:
http://pecl.php.net/package/datetime
mayank_arya at hotmail dot com
29-May-2003 04:13
29-May-2003 04:13
Here's one way to generate all intermediate dates (in mySQL format) between any 2 dates.
Get start and end dates from user input, you'd need to do the basic validations that :
- start and end dates are valid dates
- start date <= end date.
<?php
//start date 2001-02-23
$sm=2;
$sd=23;
$sy=2001;
//end date 2001-03-14
$em=3;
$ed=14;
$ey=2001;
//utc of start and end dates
$s=mktime(0,0,0,$sm, $sd, $sy);
$e=mktime(0,0,0,$em, $ed, $ey);
while($s<=$e){
print date('Y-m-d',$s)."< br >"; //display date in mySQL format
$s=$s+86400; //increment date by 86400 seconds(1 day)
}
Hope this helps :)
?>
