Как да конвертирате датата във времето?

Например, как да получите времеви печат. 22-09-2008 ?

276
22 сент. Wizard4U е на 22 септември. 2008-09-22 11:41 '08 в 11:41 ч. 2008-09-22 11:41
@ 18 отговора

PHP strtotime() дава

 $timestamp = strtotime('22-09-2008'); 

Какво работи с Поддържаните формати за дата и час .

515
22 сент. Отговор от Owen Sep 22 2008-09-22 11:45 '08 в 11:45 часа 2008-09-22 11:45

Има и strptime() , който очаква точно един формат:

border=0
 $a = strptime('22-09-2008', '%d-%m-%Y'); $timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900); 
173
22 сент. отговорът е даден от Armin Ronacher 22 сеп . 2008-09-22 11:52 '08 в 11:52 2008-09-22 11:52

Бъдете внимателни с функции като strtotime() които се опитват да „предположат“ какво имате предвид (това, разбира се, не означава, че правилата са тук ).

Наистина, 22 септември 2008 г. ще бъдат анализирани на 22 септември 2008 г., тъй като това е единственото разумно нещо.

Как ще бъде анализиран 08-09-2008 ? Вероятно 09 август 2008 година.

Какво ще кажете за 2008-09-50 ? Някои версии на PHP анализират това като 20 октомври 2008 година.

Така че, ако сте сигурни, че вашият вход е във формат DD-MM-YYYY , е по-добре да използвате решението, предлагано от @Armin Ronacher .

111
22 сент. отговорът е даден daremon 22 септември 2008-09-22 19:22 '08 в 19:22 2008-09-22 19:22

С API на DateTime :

 $dateTime = new DateTime('2008-09-22'); echo $dateTime->format('U'); // or $date = new DateTime('2008-09-22'); echo $date->getTimestamp(); 

Същото е и с процедурния API:

 $date = date_create('2008-09-22'); echo date_format($date, 'U'); // or $date = date_create('2008-09-22'); echo date_timestamp_get($date); 

Ако горната грешка възникне, защото използвате неподдържан формат , можете да го използвате

 $date = DateTime::createFromFormat('!dm-Y', '22-09-2008'); echo $dateTime->format('U'); // or $date = date_parse_from_format('!dm-Y', '22-09-2008'); echo date_format($date, 'U'); 

Моля, обърнете внимание, че ако не инсталирате ! , времето ще бъде настроено на текущото време, което е различно от първите четири, което ще използва полунощ, когато изпуснете времето.

Друга алтернатива е да използвате API IntlDateFormatter :

 $formatter = new IntlDateFormatter( 'en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'GMT', IntlDateFormatter::GREGORIAN, 'dd-MM-yyyy' ); echo $formatter->parse('22-09-2008'); 

Ако не работите с локализирани низови дати, по-прост избор вероятно е DateTime.

109
17 мая '11 в 12:01 2011-05-17 12:01 отговорът е даден от Гордън 17 май '11 в 12:01 2011-05-17 12:01

Използване на mktime :

 list($day, $month, $year) = explode('-', '22-09-2008'); echo mktime(0, 0, 0, $month, $day, $year); 
41
22 сент. Отговорът е даден до 22 септември. 2008-09-22 11:44 '08 в 11:44 2008-09-22 11:44


Ако имате PHP 5.3 или по-нова версия,

Този метод работи с и , и Windows и Unix и - това е часовата зона , която вероятно е това, което искате, ако сте сериозни за работа с дати.

Ако не се нуждаете от часова зона или искате да използвате часова зона, която вашият сървър използва:

 $d = DateTime::createFromFormat('dm-Y', '22-09-2008'); echo $d->getTimestamp(); 

1222093324 (Това ще се различава в зависимост от часовата зона на сървъра ви ...)


Ако искате да посочите коя часова зона, тук е EST. (Същото като в Ню Йорк.)

 $d = DateTime::createFromFormat('dm-Y', '22-09-2008', new DateTimeZone('EST')); echo $d->getTimestamp(); 

1222093305


Или ако искате да използвате UTC. (Същото като GMT.)

 $d = DateTime::createFromFormat('dm-Y', '22-09-2008', new DateTimeZone('UTC')); echo $d->getTimestamp(); 

1222093289


36
отговорът е даден от проф. 11 окт. Falken 11 октомври 2013-10-11 17:21 '13 в 17:21 2013-10-11 17:21

Ето едно много просто и ефективно решение, използващо split и mtime :

 $date="30/07/2010 13:24"; //Date example list($day, $month, $year, $hour, $minute) = split('[/ :]', $date); //The variables should be arranged according to your date format and so the separators $timestamp = mktime($hour, $minute, 0, $month, $day, $year); echo date("r", $timestamp); 

За мен това действаше като чар.

13
08 сент. Отговорът е даден от Виктор Божица 08 септември. 2010-09-08 19:07 '10 в 19:07 2010-09-08 19:07

Използвайки функцията strtotime (), можете лесно да конвертирате датата в времева клейма.

 <?php // set default timezone date_default_timezone_set('America/Los_Angeles'); //define date and time $date = date("d MYH:i:s"); // output echo strtotime($date); ?> 

Допълнителна информация: http://php.net/manual/en/function.strtotime.php

Онлайн инструмент за преобразуване: http://freeonlinetools24.com/

12
07 апр. отговорът е даден klit67 07 април . 2015-04-07 01:24 '15 в 1:24 2015-04-07 01:24

Като се има предвид, че функцията strptime() не работи за Windows и strtotime() може да върне неочаквани резултати, препоръчвам да използвате date_parse_from_format() :

 $date = date_parse_from_format('dm-Y', '22-09-2008'); $timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']); 
7
11 июня '12 в 13:36 2012-06-11 13:36 отговорът е даден B7ackAnge7z 11 юни '12 в 1:36 ч. 2012-06-11 13:36

Ако искате да знаете със сигурност дали датата ще бъде анализирана в случай, че очаквате, можете да използвате DateTime::createFromFormat() :

 $d = DateTime::createFromFormat('dm-Y', '22-09-2008'); if ($d === false) { die("Woah, that date doesn't look right!"); } echo $d->format('Ym-d'), PHP_EOL; // prints 2008-09-22 

Това е очевидно в този случай, но, например, 03-04-2008 може да бъде 3 април или 4 март, в зависимост от това къде сте дошли:)

6
13 дек. Отговорът е даден от Ja͢ck Dec 13 2012-12-13 06:32 '12 в 6:32 2012-12-13 06:32
 $time = '22-09-2008'; echo strtotime($time); 
6
31 июля '14 в 10:31 2014-07-31 10:31 отговорът е даден от Praveen Srinivasan на 31 юли 14 в 10:31 2014-07-31 10:31

Ако знаете формата, използвайте strptime , защото strtotime прави предположение за формат, който не винаги е правилен. Тъй като strptime не е реализиран в Windows, има персонализирана функция

Не забравяйте, че връщаната стойност tm_year - от 1900! и tm_month е 0-11

например:

 $a = strptime('22-09-2008', '%d-%m-%Y'); $timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900) 
5
07 янв. Отговорът е даден blavla 07 jan. 2010-01-07 16:26 '10 в 16:26 2010-01-07 16:26
 <?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?> 

http://php.net/manual/en/function.date.php

5
15 нояб. Отговорът е даден от Michael Chambers 15 ноември 2013-11-15 03:26 '13 в 3:26 2013-11-15 03:26
 function date_to_stamp( $date, $slash_time = true, $timezone = 'Europe/London', $expression = "#^\d{2}([^\d]*)\d{2}([^\d]*)\d{4}$#is" ) { $return = false; $_timezone = date_default_timezone_get(); date_default_timezone_set( $timezone ); if( preg_match( $expression, $date, $matches ) ) $return = date( "Ymd " . ( $slash_time ? '00:00:00' : "h:i:s" ), strtotime( str_replace( array($matches[1], $matches[2]), '-', $date ) . ' ' . date("h:i:s") ) ); date_default_timezone_set( $_timezone ); return $return; } // expression may need changing in relation to timezone echo date_to_stamp('19/03/1986', false) . '<br />'; echo date_to_stamp('19**03**1986', false) . '<br />'; echo date_to_stamp('19.03.1986') . '<br />'; echo date_to_stamp('19.03.1986', false, 'Asia/Aden') . '<br />'; echo date('Ymd h:i:s') . '<br />'; //1986-03-19 02:37:30 //1986-03-19 02:37:30 //1986-03-19 00:00:00 //1986-03-19 05:37:30 //2012-02-12 02:37:30 
4
11 февр. Отговорът е даден от Фил Джаксън на 11 февруари. 2012-02-11 14:26 '12 в 14:26 ч. 2012-02-11 14:26
 <?php echo date('U') ?> 

Ако искате, поставете го във входното време за MySQL . Горното работи много добре (само за PHP 5 или по-нова версия):

 <?php $timestamp_for_mysql = date('c') ?> 
4
13 дек. отговорът е даден на инсерт 13 декември. 2012-12-13 06:20 '12 в 6:20 2012-12-13 06:20

Ето как го правя:

 function dateToTimestamp($date, $format, $timezone='Europe/Belgrade') { //returns an array containing day start and day end timestamps $old_timezone=date_timezone_get(); date_default_timezone_set($timezone); $date=strptime($date,$format); $day_start=mktime(0,0,0,++$date['tm_mon'],++$date['tm_mday'],($date['tm_year']+1900)); $day_end=$day_start+(60*60*24); date_default_timezone_set($old_timezone); return array('day_start'=>$day_start, 'day_end'=>$day_end); } $timestamps=dateToTimestamp('15.02.1991.', '%d.%m.%Y.', 'Europe/London'); $day_start=$timestamps['day_start']; 

По този начин оставяте на функцията да знае кой формат на датата използвате и дори да укажете часовата зона.

4
13 июня '10 в 16:00 2010-06-13 16:00 Отговорът е даден от Julijan Anđelić на 13 юни 2007 г. в 16:00 часа 2010-06-13 16:00

Моля, бъдете внимателни с времето / зоната, ако сте настроили да запазите датите в базата данни, тъй като имах проблем, когато сравнявам датите с mysql, които бяха конвертирани в timestamp използвайки strtotime . трябва да използвате точно същото време / зона, преди да конвертирате датата в времевата маркировка, в противен случай strtotime () ще използва стандартната часова зона на сървъра.

Вижте този пример: https://3v4l.org/BRlmV

 function getthistime($type, $modify = null) { $now = new DateTime(null, new DateTimeZone('Asia/Baghdad')); if($modify) { $now->modify($modify); } if(!isset($type) || $type == 'datetime') { return $now->format('Ymd H:i:s'); } if($type == 'time') { return $now->format('H:i:s'); } if($type == 'timestamp') { return $now->getTimestamp(); } } function timestampfromdate($date) { return DateTime::createFromFormat('Ymd H:i:s', $date, new DateTimeZone('Asia/Baghdad'))->getTimestamp(); } echo getthistime('timestamp')."--". timestampfromdate(getthistime('datetime'))."--". strtotime(getthistime('datetime')); //getthistime('timestamp') == timestampfromdate(getthistime('datetime')) (true) //getthistime('timestamp') == strtotime(getthistime('datetime')) (false) 
1
19 мая '16 в 14:50 2016-05-19 14:50 отговорът е даден на Акам 19 май, 16 в 14:50 2016-05-19 14:50

Ако искате да преобразувате датата и часа на UTC ( 2016-02-14T12:24:48.321Z ) в времева маркировка, ето как можете да го направите:

 function UTCToTimestamp($utc_datetime_str) { preg_match_all('/(.+?)T(.+?)\.(.*?)Z/i', $utc_datetime_str, $matches_arr); $datetime_str = $matches_arr[1][0]." ".$matches_arr[2][0]; return strtotime($datetime_str); } $my_utc_datetime_str = '2016-02-14T12:24:48.321Z'; $my_timestamp_str = UTCToTimestamp($my_utc_datetime_str); 
-2
27 февр. отговорът е даден от Obinwanne Hill на 27 февруари. 2016-02-27 18:52 '16 в 18:52 2016-02-27 18:52

Други въпроси относно тагове или Задайте въпрос