Jawaban:
Metode ini bekerja pada kedua Windows dan Unix dan merupakan zona waktu sadar, yang mungkin apa yang Anda inginkan jika Anda bekerja dengan tanggal .
Jika Anda tidak peduli dengan zona waktu, atau ingin menggunakan zona waktu yang digunakan server Anda:
$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 (Ini akan berbeda tergantung pada zona waktu server Anda ...)
Jika Anda ingin menentukan zona waktu mana, di sini EST. (Sama seperti New York.)
$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
Atau jika Anda ingin menggunakan UTC . (Sama seperti " GMT ".)
$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
Apapun, itu selalu merupakan titik awal yang baik untuk menjadi ketat ketika mem-parsing string menjadi data terstruktur. Itu dapat menyimpan debugging yang aneh di masa depan. Karena itu saya sarankan untuk selalu menentukan format tanggal.
Ada juga strptime () yang mengharapkan tepat satu 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);
date_parse_from_format
bukan strptime
.
strptime
tidak diterapkan pada platform Windows.
Dengan DateTime
API :
$dateTime = new DateTime('2008-09-22');
echo $dateTime->format('U');
// or
$date = new DateTime('2008-09-22');
echo $date->getTimestamp();
Sama dengan API prosedural:
$date = date_create('2008-09-22');
echo date_format($date, 'U');
// or
$date = date_create('2008-09-22');
echo date_timestamp_get($date);
Jika hal di atas gagal karena Anda menggunakan format yang tidak didukung , Anda dapat menggunakan
$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');
Perhatikan bahwa jika Anda tidak mengatur !
, porsi waktu akan diatur ke waktu saat ini, yang berbeda dari empat yang pertama yang akan menggunakan tengah malam ketika Anda menghilangkan waktu.
Alternatif lain adalah menggunakan IntlDateFormatter
API:
$formatter = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'GMT',
IntlDateFormatter::GREGORIAN,
'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');
Kecuali jika Anda bekerja dengan string tanggal lokal, pilihan yang lebih mudah adalah DateTime.
!
cap waktu berdasarkan tanggal saya berubah pada setiap penyegaran dan membuat saya marah - karena DateTime sangat membantu menambah waktu saat ini tanpa bertanya atau diberitahu. Grrr.
Berhati-hatilah dengan fungsi-fungsi seperti strtotime()
itu yang mencoba "menebak" apa yang Anda maksudkan (tidak menebak tentu saja, aturannya ada di sini ).
Memang 22-09-2008
akan diuraikan sebagai 22 September 2008 , karena itu adalah satu-satunya hal yang masuk akal.
Bagaimana akan 08-09-2008
diuraikan? Mungkin 09 Agustus 2008 .
Bagaimana dengan 2008-09-50
? Beberapa versi PHP menguraikan ini sebagai 20 Oktober 2008 .
Jadi, jika Anda yakin input Anda dalam DD-MM-YYYY
format, lebih baik menggunakan solusi yang ditawarkan oleh @Armin Ronacher .
dd-mm-yyyy
tidak mm-dd-yyyy
.
YYYY-mm-dd
Konversi hanya terjadi untuk ditampilkan kepada pengguna
Metode ini bekerja pada kedua Windows dan Unix dan merupakan zona waktu sadar, yang mungkin apa yang Anda inginkan jika Anda bekerja dengan tanggal .
Jika Anda tidak peduli dengan zona waktu, atau ingin menggunakan zona waktu yang digunakan server Anda:
$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 (Ini akan berbeda tergantung pada zona waktu server Anda ...)
Jika Anda ingin menentukan zona waktu mana, di sini EST. (Sama seperti New York.)
$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
Atau jika Anda ingin menggunakan UTC . (Sama seperti " GMT ".)
$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
Apapun, itu selalu merupakan titik awal yang baik untuk menjadi ketat ketika mem-parsing string menjadi data terstruktur. Itu dapat menyimpan debugging yang aneh di masa depan. Karena itu saya sarankan untuk selalu menentukan format tanggal.
Menggunakan mktime :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
strtotime()
Untuk beberapa alasan strtotime()
tidak bekerja pada tanggal tertentu, dan karena itu sangat tidak dapat diandalkan.
Menggunakan fungsi strtotime () Anda dapat dengan mudah mengkonversi tanggal ke cap waktu
<?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);
?>
Info lebih lanjut: http://php.net/manual/en/function.strtotime.php
Alat konversi online: http://freeonlinetools24.com/
Berikut ini adalah solusi yang sangat sederhana dan efektif menggunakan split
dan mtime
fungsi:
$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);
Itu bekerja seperti pesona bagi saya.
Mengingat bahwa fungsi strptime()
ini tidak berfungsi untuk Windows dan strtotime()
dapat mengembalikan hasil yang tidak terduga, saya sarankan menggunakan 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']);
Jika Anda ingin tahu pasti apakah suatu tanggal diuraikan menjadi sesuatu yang Anda harapkan, Anda dapat menggunakan 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
Jelas dalam kasus ini, tetapi mis. 03-04-2008
Bisa 3 April atau 4 Maret tergantung dari mana Anda berasal :)
Jika Anda tahu penggunaan format strptime
karena strtotime
tidak menebak untuk format, yang mungkin tidak selalu benar. Karena strptime
tidak diterapkan di Windows ada fungsi khusus
Ingat bahwa nilai baliknya tm_year
adalah mulai tahun 1900! dan tm_month
0-11
Contoh:
$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);
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
Inilah cara saya melakukannya:
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'];
Dengan cara ini, Anda memberi tahu fungsi format tanggal apa yang Anda gunakan dan bahkan menentukan zona waktu.
Harap berhati-hati tentang waktu / zona jika Anda mengaturnya untuk menyimpan tanggal dalam database, karena saya mendapat masalah ketika saya membandingkan tanggal dari mysql yang dikonversi menjadi timestamp
menggunakan strtotime
. Anda harus menggunakan waktu / zona yang sama persis sebelum mengonversi tanggal ke stempel waktu, jika tidak, strtotime () akan menggunakan zona waktu server default.
Silakan lihat contoh ini: 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)
Jika Anda ingin mengonversi datetime UTC ( 2016-02-14T12:24:48.321Z
) ke timestamp, berikut ini cara melakukannya:
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);