Dater - PHP рдореЗрдВ рдПрдХ рд╕рдордп рдХреНрд╖реЗрддреНрд░, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдФрд░ рдкреНрд░рд╛рд░реВрдк рд╕рдордп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ



рдЬрдм рдХрд┐рд╕реА рд╡реЗрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрди рдХрд╛ рдХрд╛рд░реНрдп рдЙрдарддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рдмрд▓рд┐рдд рд╣реЛрдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдЬреНрдЮрд╛рдд рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рдореБрдЭреЗ рдПрдХ рднреА рд╕рдорд╛рдзрд╛рди рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдкреВрд░реНрдг рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓, рдкрд╛рд░рджрд░реНрд╢реА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреА рдХреБрдЫ рд▓рд╛рдЗрдиреЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рддрд╛рдХрд┐ рдмрд╛рдХреА рдХреЛрдб рдХрднреА рднреА рдпрд╣ рдкрддрд╛ рди рд▓рдЧрд╛ рд╕рдХреЗ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрд▓рдЧ рдЯрд╛рдЗрдо рдЬрд╝реЛрди рдХреЗ рд╕рд╛рде рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕реЗ рдФрд░ рдХрдИ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдкреАрдПрдЪрдкреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдорд┐рд▓рддреЗ рд╣реИрдВ - рдбреИрдЯрд░ , рдФрд░ рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:


рд╣рдо рдбреЗрдЬрд╝рд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рд╡рд╛рджрд╛ рдХреА рдЧрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ Dater рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдЬрд╛рдиреЗ рджреЗрдВред

рдкреНрд░рд╛рд░реВрдк рдмрд╛рдЗрдВрдбрд┐рдВрдЧ


рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

$dater = new Dater\Dater(new Dater\Locale\En()); $dater->format(time(), 'd/m/Y'); // 2013/03/14 $dater->addFormat('slashedDate', 'd/m/Y'); $dater->format(time(), 'slashedDate'); // 2013/03/14 $dater->slashedDate(time()); // 2013/03/14 

рд╕реНрд╡рд░реВрдкрдг рд╡рд┐рдХрд▓реНрдк рд╡рд┐рд╕реНрддрд╛рд░


рджрд┐рдирд╛рдВрдХ рд╕реЗ рд╕рднреА рдкреНрд░рд╛рд░реВрдкрдг рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИрдВ , рдЬрд┐рдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 $dater->addFormatOption('ago', function (DateTime $datetime) { return floor((time() - $datetime->getTimestamp()) / 86400) . ' days ago'; }); $dater->format(time() - 60*60*24*7, 'd FY, ago'); // 14 March 2013, 7 days ago 

рд▓реЛрдХрд▓ рд╕рдкреЛрд░реНрдЯ


 $dater->setLocale(new Dater\Locale\En()); echo $dater->date(); // 03/21/2013 echo $dater->now('j F Y'); // 21 March 2013 $dater->setLocale(Dater\Dater::getLocaleByCode('ru')); echo $dater->date(); // 21.03.2013 echo $dater->now('j F Y'); // 21  2013 

рд╕рд░реНрд╡рд░ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддрд░реАрдХреЗ рд▓реЛрдХреЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ


 echo $dater->date(); // 03/21/2013 (client timezone, depends on locale) echo $dater->time(); // 5:41 AM (client timezone, depends on locale) echo $dater->datetime(); // 03/21/2013 5:41 (client timezone, depends on locale) echo $dater->isoDate(); // 2013-03-21 (client timezone) echo $dater->isoTime(); // 05:41:28 (client timezone) echo $dater->isoDatetime(); // 2013-03-21 05:41:28 (client timezone) echo $dater->serverDate(); // 2013-03-21 (server timezone) echo $dater->serverTime(); // 09:41:28 (server timezone) echo $dater->serverDatetime(); // 2013-03-21 09:41:28 (server timezone) 

рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдордп / рддрд┐рдерд┐ рд░реВрдкрд╛рдВрддрд░рдг


 $dater->setServerTimezone('Europe/Moscow'); $dater->setClientTimezone('Europe/London'); echo $dater->serverDatetime(); // 2013-03-21 08:18:06 echo $dater->isoDatetime(); // 2013-03-21 04:18:06 echo $dater->time(); // 04:18 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЬрдм $dater->setServerTimezone('Europe/Moscow'); рдмреБрд▓рд╛ рд░рд╣рд╛ рд╣реЛ $dater->setServerTimezone('Europe/Moscow'); рджрд┐рдирд╛рдВрдХ () рдлрд╝рдВрдХреНрд╢рди рдФрд░ рджрд┐рдирд╛рдВрдХ рд╕рдордп рд╡рд░реНрдЧ рдирдП рд╕реЗрдЯ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдордп рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдЧрд▓рдд рдкрд╛рд╕ рдХрд░реЗрдВред

рдФрд░ рдЕрдВрдд рдореЗрдВ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛


рдПрдХ рдХреЛрдб рдЬреЛ рдЖрдкрдХреЛ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐-рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

рд╡реИрд╢реНрд╡рд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ

 $dater = new Dater\Dater(new Dater\Locale\Ru(), 'Europe/Moscow'); $timezoneDetector = new Dater\TimezoneDetector(); $dater->setClientTimezone($timezoneDetector->getClientTimezone()); $dataHandler = new Dater\DataHandler($dater); $dataHandler->enableOutputTimezoneHandler(); $dataHandler->convertRequestDataToServerTimezone(); 

рдореБрдЦреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ

 <html> <head> <?= $timezoneDetector->getHtmlJsCode() ?> </head> </html> 

рдЕрдм рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ YYYY-MM-DD HH: MM: SS рдХреЛ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдореЗрдВ YYYY-MM-DD-HH рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: MM: SS рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕реНрд╡рддрдГ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рджрд┐рдирд╛рдВрдХ-рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдмрд╕ YYYY-MM-DD HH рдЬреЛрдбрд╝реЗрдВ: MM: SS [ md] рдпрд╛ YYYY-MM-DD HH: MM: SS [рддрд┐рдерд┐] рдЬрд╣рд╛рдВ рджрд┐рдирд╛рдВрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рджреНрд╡рд┐рдкрдж рд╣реИ ред рдЖрдк рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдкреНрд░рд╛рд░реВрдкрд┐рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: 1363853607 [dmY]ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдбреЗрдЯрд╛

 <html> <body> Timestamp format: 1363238564 ( ) Timestamp format: 1363238564[Y/m/d] Timestamp format: 1363238564[datetime] Server datetime format: 2013-03-14 09:22:44[Y/m/d] Server datetime format: 2013-03-14 09:22:44[time] Server datetime format: 2013-03-14 09:22:44 </body> </html> 

рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛

 <html> <body> Timestamp format: 1363238564 ( ) Timestamp format: 2013/03/14 Timestamp format: 14.03.2013 07:22 Server datetime format: 2013/03/14 Server datetime format: 07:22 Server datetime format: 2013-03-14 07:22:44 </body> </html> 


рдЙрд╕реА рд╕рдордп, $dataHandler->convertRequestDataToServerTimezone(); рд╕рднреА YYYY-MM-DD HH рдХрд░ рджреЗрдЧрд╛: MM: рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ SS рдбреЗрдЯрд╛ рдХреЛ YYYY-MM-DD-HH рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: MM: SS рд╕рд░реНрд╡рд░ рд╕рдордп рдХреНрд╖реЗрддреНрд░ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд░реНрд╡рд░ рдХреЛ рдХрднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рджреВрд╕рд░реЗ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджрд┐рдирд╛рдВрдХ-рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рднреЗрдЬрддрд╛ рд╣реИред

рдпрд╣ рдорд╛рдирдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдЪрд░рдо рд╡рд┐рдХрд▓реНрдк рд╣реИред рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рдорд╛рдзрд╛рди $dataHandler->enableOutputTimezoneHandler(); рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫреЛрдбрд╝рдирд╛ $dataHandler->enableOutputTimezoneHandler(); рдФрд░ рдмрд╕ рдЙрдЪрд┐рдд рд╕реНрд╡рд░реВрдкрдг рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рджрд┐рдирд╛рдВрдХ-рд╕рдордп рдХреЗ рд╕рдореНрдорд┐рд▓рди рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, <?= $dater->date($datetimeOrTimestamp) ?>

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд▓реЗрдЦрдХ рд╣реВрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдЖрд▓реЛрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрднрд╛рд░реА рд╣реВрдВ рдФрд░ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реВрдВред GitHub рдореЗрдВ рдПрдХ рдирд┐рд╢реБрд▓реНрдХ BSD рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╕реНрд░реЛрдд рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрднреА рднреА рдХреЛрдИ рдХрд╛рдо рдЖ рд░рд╣рд╛ рд╣реИ :)

UPD рд▓реЛрдХрдкреНрд░рд┐рдп рдорд╛рдВрдЧ рд╕реЗ, PSR-0 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдЕрд▓рдЧ рдмреНрд░рдВрдЪ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рдВрдЧреАрддрдХрд╛рд░ рд╕реЗ "dater/dater":"1.*@dev" рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ "dater/dater":"1.*@dev" ред

Source: https://habr.com/ru/post/In173693/


All Articles