Cum pot obține timestamp de exemplu, 22-09-2008`?
PHP's strtotime()
da
$timestamp = strtotime('22-09-2008');
Care funcționează cu Acceptate Formate de Dată și oră Docs.
Există, de asemenea, strptime()
care se așteaptă exact unul format:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
Cu DateTime
API:
$dateTime = new DateTime('2008-09-22');
echo $dateTime->format('U');
// or
$date = new DateTime('2008-09-22');
echo $date->getTimestamp();
La fel cu cele procedurale API:
$date = date_create('2008-09-22');
echo date_format($date, 'U');
// or
$date = date_create('2008-09-22');
echo date_timestamp_get($date);
Dacă cele de mai sus eșuează, pentru că sunteți folosind un format neacceptat, puteți utiliza
$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008');
echo $dateTime->format('U');
// or
$date = date_parse_from_format('!d-m-Y', '22-09-2008');
echo date_format($date, 'U');
Rețineți că, dacă nu setați !
, porțiunea de timp va fi setat la timpul curent, care este diferit de primele patru, care va folosi miezul nopții, atunci când omite timp.
O altă alternativă este de a utiliza IntlDateFormatter
API:
$formatter = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'GMT',
IntlDateFormatter::GREGORIAN,
'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');
Dacă nu se lucrează cu localizate data siruri de caractere, cea mai ușoară alegere este probabil DateTime.
Fii atent cu funcții cum ar fi strtotime()
care încearcă să "cred" la ce te referi (nu't cred, desigur, reguli sunt aici).
Într-adevăr 22-09-2008
va fi analizat ca 22 septembrie 2008, ca acesta este singurul lucru rezonabil.
Cum va 08-09-2008
fie analizat? Probabil 09 August 2008.
Ce zici de 2008-09-50
? Unele versiuni de PHP parse acest ca 20 octombrie 2008.
Deci, dacă sunteți sigur că dvs. de intrare este în DD-MM-YYYY
format, l's mai bine să utilizați soluția oferită de către @Armin Ronacher.
Dacă aveți PHP 5.3 sau mai sus,
această metodă funcționează pe ambele Windows și Unix și este fus orar conștient, care este, probabil, ceea ce vrei dacă sunt grave, despre lucrul cu datele.
Dacă tu nu't pasă de fus orar, sau doriți să utilizați fus orar server-ul dvs. utilizează:
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();
1222093324 (Acest lucru va diferi în funcție de fusul orar...)
Dacă doriți să specificați în timp ce zona, aici EST. (La fel ca New York.)
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST'));
echo $d->getTimestamp();
1222093305
Sau, dacă doriți să utilizați UTC. (La fel ca "GMT".)
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC'));
echo $d->getTimestamp();
1222093289
Folosind strtotime() funcția, puteți converti cu ușurință data la timestamp
<?php
// set default timezone
date_default_timezone_set('America/Los_Angeles');
//define date and time
$date = date("d M Y H:i:s");
// output
echo strtotime($date);
?>
Mai multe informatii: http://php.net/manual/en/function.strtotime.php
On-line instrument de conversie: http://freeonlinetools24.com/
Aici este o foarte simplă și eficientă soluție folosind "split" și mtime
funcții:
$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);
Ea a lucrat ca un farmec pentru mine.
Având în vedere că funcția strptime()
nu funcționează pentru Windows și strtotime () poate returna rezultate neașteptate, se recomanda folosirea
date_parse_from_format()`:
$date = date_parse_from_format('d-m-Y', '22-09-2008');
$timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);
Dacă vrei să știi sigur dacă o dată devine analizat în ceva ce vă așteptați, puteți utiliza DateTime::createFromFormat()
:
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
if ($d === false) {
die("Woah, that date doesn't look right!");
}
echo $d->format('Y-m-d'), PHP_EOL;
// prints 2008-09-22
L'evident, în acest caz, dar de exemplu 03-04-2008
ar putea fi data de 3 aprilie sau 4 Martie, în funcție de unde ai venit :)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
Dacă știți format folosi strptime", deoarece " strtotimenu o cred pentru format, care ar putea să nu fie întotdeauna corect. Din
strptime` nu este implementat în Windows există o funcție particularizată
Amintiți-vă că returnvalue tm_year
este de 1900! și tm_month
este 0-11
Exemplu:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)
Aici este cum de am'd face:
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'];
În acest fel, să-funcția stiu ce format de dată pe care îl utilizați și chiar specifica zona de fus orar.
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( "Y-m-d " . ( $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('Y-m-d 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
Vă rugăm să fie atent cu privire la data/zona dacă ați stabilit pentru a salva datele in baza de date, ca eu am o problemă atunci când am comparat datele de la mysql care convertit la timestamp "folosind" strtotime
. trebuie să folosească exact același timp/zona înainte de conversie data la timestamp altfel, strtotime() va utiliza implicit serverul fus orar.
Vă rugăm să consultați acest exemplu: 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('Y-m-d H:i:s');
}
if($type == 'time') {
return $now->format('H:i:s');
}
if($type == 'timestamp') {
return $now->getTimestamp();
}
}
function timestampfromdate($date) {
return DateTime::createFromFormat('Y-m-d 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)
Daca're în căutarea de a converti un UTC datetime (2016-02-14T12:24:48.321 Z
) la timestamp, aici's cum te-ai'd face:
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);