Nasıl mesela itibaren damgası alabilirim 22-09-2008
?
PHP'nin strtotime()
a> verir
$timestamp = strtotime('22-09-2008');
Supported Date and Time Formats Docs ile çalışır hangi.
Orada da strptime()
a> tam olarak bir biçimi beklediği:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
(Bu, elbette rules are here tahmin değil) ne demek istediğini "tahmin" için try strtotime()
gibi fonksiyonları ile dikkatli olun.
Bu sadece makul bir şey gibi gerçekten 22-09-2008
, 22 September 2008 olarak işlenecek.
Nasıl 08-09-2008
ayrıştırılır olacak? Muhtemelen 09 August 2008.
Peki 2008-09-50
? PHP bazı sürümleri 20 October 2008 olarak ayrıştırmak.
Eğer girdi GG-AA-YYYY biçiminde olduğundan emin iseniz Yani, @Armin Ronacher tarafından sunulan çözüm kullanmak daha iyidir.
Ile DateTime
API a>:
$dateTime = new DateTime('2008-09-22');
echo $dateTime->format('U');
// or
$date = new DateTime('2008-09-22');
echo $date->getTimestamp();
Usul 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);
Bir unsupported format, kullanabilirsiniz kullanıyorsanız, çünkü yukarıda 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 !
set yoksa, saat bölümü Eğer zaman atladığınızda gece yarısı kullanacağı ilk dört farklı şimdiki zaman, ayarlanmış unutmayın.
Yine başka bir alternatif IntlDateFormatter
a> API kullanmak için:
$formatter = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'GMT',
IntlDateFormatter::GREGORIAN,
'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');
Eğer yerelleştirilmiş tarih dizeleri ile çalışmadığınız sürece, kolay bir seçim olasılığı DateTime.
Kullanma mktime,
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
Burada split
ve mtime
fonksiyonları kullanılarak ç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);
Bu benim için bir cazibe gibi çalıştı.
Eğer formatı kullanımını biliyorsanız strptime
, çünkü strtotime
her zaman doğru olmayabilir biçimi, bir tahmin yok. strptime
Windows uygulanmadı beri özel bir işlevi vardır
ReturnValue tm_year
1900'den olduğunu unutmayın! ve tm_month
0-11 olduğu
Örnek:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)
İşte ben bunu yapmak istiyorum nasıl:
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, işlevi kullanarak ve hatta dilimini belirtmek ne tarih formatı bildirin.
Eğer bir tarih beklediğiniz şey içine derlenecek olmadığını kesin olarak bilmek istiyorsanız, kullanabileceğiniz DateTime::createFromFormat()
:
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
if (is_null($d)) {
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, ama mesela 03-04-2008
nereden geldiğini bağlı olarak Nisan 3 veya 4 Mart olabilir :)
<?php echo date('U') ?>
İsterseniz, bir MySQL giriş türü zaman damgası koydu. (Sadece PHP 5 veya üstü) çok iyi yukarıda işler:
<?php $timestamp_for_mysql = date('c') ?>
This method works on both, Windows ve Unix. Em>
Eğer zaman dilimi hakkında bakım veya saat dilimini kullanmak istemiyorsanız sunucu kullanır:
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();
1222093324 (This will differ depending on your server time zone...)
Burada zaman dilimini, "EST" belirtmek istiyorum. (New York gibi aynı.)
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST'));
echo $d->getTimestamp();
1222093305
Yoksa UTC kullanmak istiyorsanız. (Same "GMT" olarak.)
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC'));
echo $d->getTimestamp();
1222093289