| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Sekunnit luettevaan muotoonqin 31.05.05 16:15 Muuntaa sekuntien määrän ihmiselle selkeään muotoon
// Muuntaa sekuntien määrät luettavaan muotoon function time_format($seconds) { settype ($seconds, 'integer'); $seconds_given = $seconds; $takes_time = array(31536000, 2626560, 604800, 86400, 3600, 60); $delimeter = array(" vuotta", " kuukautta", " viikkoa", " päivää", " tuntia", " minuuttia"); $output = array(); foreach ($takes_time as $key => $val) { ${$suffixes[$key]} = ($val == 0) ? $seconds : floor(($seconds / $val)); $seconds -= ${$suffixes[$key]} * $val; if (${$suffixes[$key]} > 0 || (!empty($output))) { $to_output = ($key > 1 && strlen(${$suffixes[$key]}) == 1) ? ${$suffixes[$key]} : ${$suffixes[$key]}; $to_output .= $delimeter[$key]; $output[] = $to_output; } } if ($seconds_given >= 60) { $output = array_slice($output, 0, 2); $output_string = implode(', ', $output); } else { $output_string = 'Alle minuutti!'; } return trim($output_string); } editoitu: 16:26 31.5.05 qin 16:17 31.5.05 Tämä siis näyttää jopa vuosia jos niikseen tulee, ja näyttää aina vain kaksi suurinta yksikköä, esim: "4 vuotta, 3, kuukautta" tai "3 viikkoa, 5 päivää" editoitu: 12:26 21.6.05 chiman 17:36 31.5.05 Käytännöllinen pieni koodipätkä. En tiedä onko sopivaa, mutta liitän tähän vastaavan funktion, jonka koodasin Pythonilla joskus kuukausia sitten. Tulostus on muotoa "3d 15h ago". python: def time_format(secs): ago = [] for c, val in [['d', 86400], ['h', 3600], ['m', 60], ['s', 1]]: if secs >= val: ago.append('%d%s' % (secs / val, c)) secs = secs % val return ' '.join(ago[:2]) + ' ago' Edit: Kokeillaan uuden Python-värityksen toimivuutta. Kryil 18:29 31.5.05 Voisi tehdä lyhemminkin. Ja php:n luonteen tietäen lyhyt == nopea == hyvä. Ja miksi vain minuutin tarkkuudella? Linkku 09:22 1.6.05 Ja tässä vielä Perlillä toteutettu versio #!/usr/bin/perl -w use strict; $\ = "\n"; sub time_format($) { my $secs = $_[0]; my @ago; for (['d', 86400], ['h', 3600], ['m', 60], ['s', 1]) { my ($c, $val) = @{$_}; if ( $secs>=$val ) { push @ago, int(($secs/$val)) .$c; $secs = $secs % $val; } } return join ' ', @ago; } # tulostaa 4h 15m 25s print time_format(15325); qin 12:13 1.6.05 No noissa em. "lyhennetyissä" versioissa juuri puuttuu noita featureja omaani verrattuna, joka tulostaa siis aina optimaalisimmalla ja ihmissilmälle kauneimmalla mahdollisella tavalla ajan, ei esim: "0d 0h 32m 0s" Linkku 12:34 1.6.05 qin kirjoitti: No noissa em. "lyhennetyissä" versioissa juuri puuttuu noita featureja omaani verrattuna, joka tulostaa siis aina optimaalisimmalla ja ihmissilmälle kauneimmalla mahdollisella tavalla ajan, ei esim: "0d 0h 32m 0s" Ei toi mun koodi ainakaan tulosta nollia chiman 11:06 2.6.05 Oma koodini näyttää kaksi suurinta nollasta poikkeavaa ryhmää. Eli esim. "4d 5m", "32s", "2m 10s" tai "6m" (jos on tasan 6 minuuttia). Siksi halusinkin liittää oman koodini tuohon, koska sen toiminta vastasi hämmästyttävästi qinin omaa. Oli kiva nähdä myös tuo Linkun tekemä Perl-versio, vaikka pidänkin Pythonin syntaksista enemmän :) Linkku 11:35 2.6.05 chiman kirjoitti: Oma koodini näyttää kaksi suurinta nollasta poikkeavaa ryhmää. Ehdinkin jo ihmetellä, että kumpi koodi on rikki. :) Sitten suomasin tuon [:2] editoitu: 00:49 8.6.05 ane 00:48 8.6.05 Tuota wtf. En oikein näessä tässä pätkässä järkeä, kun PHP:ssä (ja C:ssäkin) on tällainen sisäänrakennettuna. Ja localeita käyttämällä tuokin funkkari tulostaa suomea. http://fi.php.net/strftime chiman 10:09 8.6.05 Milläs argumenteilla tuon strftimen saa näyttämään kaksi suurinta (nollasta poikkeavaa) yksikköä? editoitu: 18:26 11.6.05 Ztane 18:19 11.6.05 ja mitä järkiä on tulostaa kuukausia ja vuosia tuolleen... "12 kuukautta 0 viikkoa" ja sitten "1 vuosi 0 kuukautta"... iha tolkutonta... varsinki ko kuukauksien pituus ei tiettävästi oo vakio. editoitu: 15:50 27.11.05 Grez 15:42 27.11.05 Eihän vuosienkaan pituus ole vakio. Oikeastaan viikon jälkeen seuraava vakiopituinen yksikkö olisi "tuplavuosituhat" eli 730484 päivää. Tietty jos otetaan karkaussekunnitkin huomioon, niin sitten edes päivän pituus ei ole aina vakio. |
![]() Haku
|