Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Päivämäärän muuttaminen

Sivun loppuun

Rocceri [10.09.2009 16:46:44]

#

Terve, tarvitsis muuttaa selkokielinen aika (esim. 26.8.1998) sellaiseen muotoon kun time() palauttaisi. En vain tiedä miten date() funktiolla saisin sen väännettyä, kun en tiedä missä järjestyksessä tiedot ovat siinä aikaleimassa.

Blaze [10.09.2009 16:50:00]

#

https://www.php.net/manual/en/function.strtotime.php

OILgame [10.09.2009 16:51:05]

#

<?php
echo mktime(0, 0, 0, $kuukausi, $paiva, $vuosi);
?>

Rocceri [10.09.2009 16:53:54]

#

Kiitos Blazelle, juuri se mitä etsin.

Rocceri [13.09.2009 18:54:00]

#

Vielä yksi kysymys tähän samaan asiaan liittyen: Jos on annettu jonkun ihmisen syntymäpäivä, esim. 26.3.1986 ja kun tiedetään tämä päivä 13.9.2009, niin miten voidaan laskea ikä? Putkassa profiil näyttää sinänsä väärin, kun se laskee esim. 19,234. Pitäisi siis saada vastaukseksi äskeisestä vuosia,päiviä.

Smuliii [13.09.2009 19:05:02]

#

Google auttoi tässäkin asiassa:

<?php
$stamp = strtotime("21 march 1986 12:00:00"); //the date and time you where born
$stamp2 = strtotime("now");
$diff = ($stamp2 - $stamp);

$years = floor($diff / 31556927.29); //the average year is 365.242214 days :)
$months = floor(($diff -$years * 31556927.29)/ 2629743.941); // the average month :P
$days = floor(($diff- $years * 31556927.29 - $months * 2629743.941) / 86400);
$hour = floor(($diff- $years * 31556927.29 - $months * 2629743.941 - $days * 86400)/ 3600);
$min = floor(($diff- $years * 31556927.29 - $months * 2629743.941 - $days * 86400 - $hour * 3600) / 60);
$sec = floor($diff- $years * 31556927.29 - $months * 2629743.941  - $days * 86400 - $hour * 3600 - $min * 60);
$return = "I am $years year $months months $days days $hour h $min m $sec s old";
echo $return;
?>

os [13.09.2009 20:41:38]

#

Nuo epämääräiset keskiarvot eivät kyllä anna millään mittarilla oikeaa tulosta. Kannattaa mieluummin tehdä vaikka näin:

<?php

// Syntymäaika
$p0 = 1;
$k0 = 1;
$v0 = 1900;

// Tämä päivämäärä
$p1 = date("d");
$k1 = date("m");
$v1 = date("Y");

$dv = $v1-$v0;
$dk = $k1-$k0;
$dp = $p1-$p0;

if ( $dp < 0 ) { $dk--; }
if ( $dk < 0 ) { $dv--; $dk += 12; }

$u = mktime(0,0,0,$k0+$dk, 1, $v0+$dv);
if ( $dp < 0 ) $dp += date("t", $u);

// dv,dk,dp = vuodet, kuukaudet, päivät
echo "$dv v $dk kk $dp p";

?>

Tuossa siis kuukaudet lasketaan siten, että jos syntymäpäivä on esimerkiksi 15. päivä, niin kuukaudet tulevat täyteen aina 15. päivä.

tsuriga [13.09.2009 20:52:23]

#

Käytetään valmiita palikoita, kun semmosia on kerran tarjolla: DateTime::diff. Selkeämpi ja sinänsä varmempi, että tuon toteutusta on tiiraillut varmastikin/toivottavasti useampi silmäpari, kuin mitä sen oman virityksen.

<?php
// Remember to set default timezone in php.ini or here

// Create a new DateTime object with the known date
$birthDate = new DateTime('1986-03-26 12:00:00');

/*
 * Calculate difference. Note that the default
 * time for new DateTime object is "now".
 */
$diff = $birthDate->diff(new DateTime());

/*
 * Print full years, months and days of the difference
 * See var_dump($diff); for full public property listing.
 */
echo sprintf('%s years %s months %s days', $diff->y, $diff->m, $diff->d);

?>

EDIT: Mistä höpisöön alla oleva ;). Kyse oli siis siitä, että VB:stähän löytyy allekirjoittaneen päivän muinoin pelastanut DateDiff-funkkari, enkä ittekään meinannu ensin muistaa DateTime-luokan diff-metodia, mutta -2 sekuntia manuaalissa ja sieltähän se iski naamaan ko sata sienestäjää syyshämärässä.

Grez [13.09.2009 21:01:35]

#

En mä kyllä ymmärrä miten tää olisi merkittävästi helpompaa VB:lläkään tai mikä tuossa muka on vaikeaa..

Ainoa vaikeus on se, että tehtävänannossa ei kerrota miten pitää laskea jos on syntynyt karkauspäivänä. Eli onko 1.3.2009 silloin tasan xx vuotta vai xx vuotta ja 1 päivä.

Senhän voi tehdä vaikka näin (lähdekoodi)

Rocceri [14.09.2009 08:53:15]

#

Kiitos teille, saimpas toimimaan halutulla tavalla.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta