Jump to content
php.lv forumi

datuma pārvēršana nākotnes / pagātnes formā


EdgarsK

Recommended Posts

Sveiki,

varbūt kādam ir aizķērusies funkcija ar kuras palīdzību nosaka timestamp vērtības attālumu ar vārdiem ?!

 

Piemēri:

 

return "Pirms pāris sekundēm";

return "Pirms 1 minūtes";

return "Pirms stundas";

return "Pēc 2 stundām";

return "Pēc 2 stundām, 15 minūtēm";

return "Pēc nedēļas, 3 dienām";

return "Pēc 3 nedēļām, 1 dienas";

return "Pirms stundas, 3 minūtēm";

return "Pirms 3 stundām, 45 minūtēm";

Link to comment
Share on other sites

function distanceOfTimeInWords($fromTime, $toTime = 0, $showLessThanAMinute = false) {
   $distanceInSeconds = round(abs($toTime - $fromTime));
   $distanceInMinutes = round($distanceInSeconds / 60);

       if ( $distanceInMinutes <= 1 ) {
           if ( !$showLessThanAMinute ) {
               return ($distanceInMinutes == 0) ? 'mazāk nekā pirms minūtes' : 'pirms minūtes';
           } else {
               if ( $distanceInSeconds < 5 ) {
                   return 'mazāk nekā pirms 5 sekundēm';
               }
               if ( $distanceInSeconds < 10 ) {
                   return 'mazāk nekā pirms 10 sekundēm';
               }
               if ( $distanceInSeconds < 20 ) {
                   return 'mazāk nekā pirms 20 sekundēm';
               }
               if ( $distanceInSeconds < 40 ) {
                   return 'apmēram pirms pusminūtes';
               }
               if ( $distanceInSeconds < 60 ) {
                   return 'mazāk nekā pirms minūtes';
               }

               return 'pirms minūtes';
           }
       }
       if ( $distanceInMinutes < 45 ) {
           return 'pirms ' .$distanceInMinutes . ' minūtēm';
       }
       if ( $distanceInMinutes < 90 ) {
           return 'apmēram pirms 1 stundas';
       }
       if ( $distanceInMinutes < 1440 ) {
           return 'apmēram pirms ' . round(floatval($distanceInMinutes) / 60.0) . ' stundām';
       }
       if ( $distanceInMinutes < 2880 ) {
           return 'pirms 1 dienas';
       }
       if ( $distanceInMinutes < 43200 ) {
           return 'apmēram pirms ' . round(floatval($distanceInMinutes) / 1440) . ' dienām';
       }
       if ( $distanceInMinutes < 86400 ) {
           return 'apmēram pirms mēneša';
       }
       if ( $distanceInMinutes < 525600 ) {
           return 'apmēram pirms ' . round(floatval($distanceInMinutes) / 43200) . ' mēnešiem';
       }
       if ( $distanceInMinutes < 1051199 ) {
           return 'apmēram pirms 1 gada';
       }

       return 'pār ' . round(floatval($distanceInMinutes) / 525600) . ' gadiem';
}

Link to comment
Share on other sites

  • 2 weeks later...
  • 9 months later...

Nedaudz sīkāk:

 

Db ir pievienošanas datums ---> date_created (xx.xx.xxxx xx:xx:xx) (šis gan ir varchar, nevis kāds no date tipiem)

 

 

šādi iegūstu tagadējo laiku: $time_now = date("H:i"); xx:xx (hh:mm)

 

 

šādi no date_created iegūstu tikai xx:xx (hh:mm) --> $date_created_time = substr($date_created,-8,5);

 

 

un to fju pasaucu: echo distanceOfTimeInWords($date_created_time, $time_now, $showLessThanAMinute = false);

 

 

 

atgriež: mazak neka pirms minutes , visiem ierakstiem, kautgan ieraksti pievienoti dažādos laikos, un neviens pirms minūtes.

Link to comment
Share on other sites

Db ir pievienošanas datums ---> date_created (xx.xx.xxxx xx:xx:xx) (šis gan ir varchar, nevis kāds no date tipiem)

kapec Warchar?

Ja buutu date lauks tad elementari dabuutu UnixTimestampu, un talak jau ar IF/ELSE + nedaudz matimatikas dabuun jebkuru laika intervalu (vakar shodien pirms gada etc)

piedevam pashu datumu arii uzreiz noformatee ieksh SQL kverija

ta tev jaizveido tas UNIXtimestamps un tad jau talak jadarbojaas...

Liela mulkjiiba ir DB datumu glabat ieksh Warchar (tam domti date vai Unixtimestamp formati)-> protams fiziski tas ir reali, bet nu galiigi stulbi, jo faktiski apgrutina datuma apstradi, arii mekleeshanu pec menesha etc ...

Link to comment
Share on other sites

Funkcijai varbūt nav ne vainas.

Bet, ja tu padod - $time_now = date("H:i");, kas piemēram ir 15:47 un $date_created_time = substr($date_created,-8,5);, kas piemēram ir 14:47

Vadoties pēc šī $distanceInSeconds = round(abs($toTime - $fromTime));, cik tavuprāt ir round(abs('15:47'-'14:47'))=?

Link to comment
Share on other sites

  • 2 weeks later...

Atgriežoties pie šīs lietas:

 

Atradu pavisam labu skriptu: http://www.9lessons.info/2010/01/php-time-stamp-function.html

 

Pasauc to šādi:

 

$session_time = strtotime($event_date_created); // $event_date_created - db ieraksts (TIMESTAMP)
$time_display = time_stamp($session_time); 
echo $time_display; // izvada pārveidotu pievienošanas laiku

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...