Yanıtlar:
Bu yöntem üzerinde çalışır hem Windows ve Unix ve bir saat dilimi Üzerinde çalışmak eğer ne istediğinizi muhtemelen olan farkında tarihleri .
Saat dilimi ile ilgilenmiyorsanız veya sunucunuzun kullandığı saat dilimini kullanmak istiyorsanız:
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093324 (Bu, sunucu saat diliminize bağlı olarak değişir ...)
Hangi saat diliminde belirtmek isterseniz, burada EST. (New York ile aynı.)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('EST')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093305
Veya UTC'yi kullanmak istiyorsanız . (" GMT " ile aynı .)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('UTC')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093289
Ne olursa olsun, dizeleri yapılandırılmış verilere ayrıştırırken katı olmak her zaman iyi bir başlangıç noktasıdır. Gelecekte garip hata ayıklamayı kurtarabilir. Bu nedenle her zaman tarih biçimini belirtmenizi öneririm.
Ayrıca tam olarak bir biçim bekleyen strptime () vardır:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
date_parse_from_format
yerine kullanmayı düşünün strptime
.
strptime
Windows platformlarında uygulanmadı.
İle DateTime
API :
$dateTime = new DateTime('2008-09-22');
echo $dateTime->format('U');
// or
$date = new DateTime('2008-09-22');
echo $date->getTimestamp();
Prosedürel API ile aynı:
$date = date_create('2008-09-22');
echo date_format($date, 'U');
// or
$date = date_create('2008-09-22');
echo date_timestamp_get($date);
Desteklenmeyen bir biçim kullandığınız için yukarıdaki işlem başarısız olursa ,
$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');
Eğer ayarlamazsanız, !
zaman bölümünün geçerli saate ayarlanacağını unutmayın; bu, saati atladığınızda gece yarısını kullanacak ilk dört saatten farklıdır.
Yine başka bir alternatif IntlDateFormatter
API kullanmaktır :
$formatter = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'GMT',
IntlDateFormatter::GREGORIAN,
'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');
Yerelleştirilmiş tarih dizeleriyle çalışmadığınız sürece, daha kolay seçim büyük olasılıkla DateTime olur.
!
DateTime yardımsever sorarak veya söylenmeden geçerli zamanı ekleyerek çünkü - My tarih bazlı damgası her tazelede değişen ve deli beni kullanıyordu. Grrr.
Bunun gibi işlevlere dikkat edin, strtotime()
ne demek istediğinizi "tahmin etmeye" çalışın (elbette tahmin etmiyor, kurallar burada ).
Gerçekten de tek makul şey olduğu için 22 Eylül 200822-09-2008
olarak ayrıştırılacaktır .
Nasıl 08-09-2008
ayrıştırılacak? Muhtemelen 09 Ağustos 2008 .
Ne olmuş 2008-09-50
? PHP'nin bazı sürümleri bunu 20 Ekim 2008 olarak ayrıştırmaktadır .
Dolayısıyla, girdinizinDD-MM-YYYY
formatta olduğundan eminseniz, @Armin Ronacher tarafından sunulan çözümü kullanmak daha iyidir .
dd-mm-yyyy
değildir mm-dd-yyyy
.
YYYY-mm-dd
. Dönüşüm yalnızca kullanıcılara gösterilir
Bu yöntem üzerinde çalışır hem Windows ve Unix ve bir saat dilimi Üzerinde çalışmak eğer ne istediğinizi muhtemelen olan farkında tarihleri .
Saat dilimi ile ilgilenmiyorsanız veya sunucunuzun kullandığı saat dilimini kullanmak istiyorsanız:
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093324 (Bu, sunucu saat diliminize bağlı olarak değişir ...)
Hangi saat diliminde belirtmek isterseniz, burada EST. (New York ile aynı.)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('EST')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093305
Veya UTC'yi kullanmak istiyorsanız . (" GMT " ile aynı .)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('UTC')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093289
Ne olursa olsun, dizeleri yapılandırılmış verilere ayrıştırırken katı olmak her zaman iyi bir başlangıç noktasıdır. Gelecekte garip hata ayıklamayı kurtarabilir. Bu nedenle her zaman tarih biçimini belirtmenizi öneririm.
Mktime kullanarak :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
strtotime()
Bazı nedenlerden dolayı strtotime()
belirli tarihlerde çalışmaz ve bu nedenle çok güvenilmezdir.
Strtotime () işlevini kullanarak tarihi kolayca zaman damgasına dönüştürebilirsiniz
<?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);
?>
Daha fazla bilgi: http://php.net/manual/en/function.strtotime.php
Çevrimiçi dönüşüm aracı: http://freeonlinetools24.com/
İşte split
ve mtime
fonksiyonlarını kullanan çok basit ve etkili bir çözüm :
$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);
Benim için bir cazibe gibi çalıştı.
İşlevin strptime()
Windows için çalışmadığı ve strtotime()
beklenmedik sonuçlar döndürebileceği göz önüne alındığında, şunları kullanmanızı öneririz 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']);
Bir tarihin beklediğiniz bir şeye ayrıştırılıp ayrıştırılmadığından emin olmak için şunu kullanabilirsiniz 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
Bu durumda açıktır, ancak 03-04-2008
nereden geldiğinize bağlı olarak 3 Nisan veya 4 Mart olabilir :)
Eğer biçimini biliyorsanız, strptime
çünkü strtotime
her zaman doğru olmayabilir biçimi için bir tahmin yapar. Yana strptime
Windows uygulanmadı özel fonksiyonu vardır
Geri dönüş tm_year
değerinin 1900 olduğunu unutmayın ! ve tm_month
0-11
Misal:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
$time = '22-09-2008';
echo strtotime($time);
PHP işlevini kullan strtotime()
echo strtotime('2019/06/06');
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
İşte nasıl yaparım:
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'];
Bu şekilde, hangi tarih biçimini kullandığınızı işleve bildirir ve hatta saat dilimini belirtirsiniz.
timestamp
Kullanmaya dönüştürülen mysql'den tarihleri karşılaştırdığımda bir sorun yaşadığım için, veritabanında tarihleri kaydetmek için ayarlarsanız saat / bölge konusunda dikkatli olun.strtotime
. tarihi zaman damgasına dönüştürmeden önce tam olarak aynı saat / bölgeyi kullanmanız gerekir, aksi takdirde strtotime () varsayılan sunucu saat dilimini kullanır.
Lütfen bu örneğe bakın: 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)
Bir UTC datetime ( 2016-02-14T12:24:48.321Z
) öğesini zaman damgasına dönüştürmek istiyorsanız, bunu şu şekilde yapabilirsiniz:
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);