Antworten:
Diese Methode funktioniert auf beiden Windows und Unix und ist Zeitzone bewusst, was wahrscheinlich ist , was Sie wollen , wenn Sie mit der Arbeit Daten .
Wenn Sie sich nicht für die Zeitzone interessieren oder die Zeitzone verwenden möchten, die Ihr Server verwendet:
$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 (Dies hängt von Ihrer Server-Zeitzone ab ...)
Wenn Sie angeben möchten, in welcher Zeitzone, hier EST. (Wie 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
Oder wenn Sie UTC verwenden möchten . (Wie " 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
Unabhängig davon ist es immer ein guter Ausgangspunkt, um beim Analysieren von Zeichenfolgen in strukturierte Daten streng zu sein. Dies kann in Zukunft umständliches Debuggen ersparen. Daher empfehle ich, immer das Datumsformat anzugeben.
Es gibt auch strptime (), das genau ein Format erwartet:
$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
anstelle von verwenden strptime
.
strptime
nicht in Windows-Plattformen implementiert ist.
Mit DateTime
API :
$dateTime = new DateTime('2008-09-22');
echo $dateTime->format('U');
// or
$date = new DateTime('2008-09-22');
echo $date->getTimestamp();
Das gleiche gilt für die prozedurale API:
$date = date_create('2008-09-22');
echo date_format($date, 'U');
// or
$date = date_create('2008-09-22');
echo date_timestamp_get($date);
Wenn dies fehlschlägt, weil Sie ein nicht unterstütztes Format verwenden , können Sie es verwenden
$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');
Beachten Sie, dass, wenn Sie die nicht einstellen !
, der Zeitabschnitt auf die aktuelle Zeit eingestellt wird, die sich von den ersten vier unterscheidet, die Mitternacht verwenden, wenn Sie die Zeit weglassen.
Eine weitere Alternative ist die Verwendung der IntlDateFormatter
API:
$formatter = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'GMT',
IntlDateFormatter::GREGORIAN,
'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');
Wenn Sie nicht mit lokalisierten Datumszeichenfolgen arbeiten, ist DateTime wahrscheinlich die einfachere Wahl.
!
meinem Datum basierende Zeitstempel bei jeder Aktualisierung geändert hat und mich verrückt gemacht hat - denn DateTime hat die aktuelle Zeit hilfreich hinzugefügt, ohne zu fragen oder informiert zu werden. Grrr.
Seien Sie vorsichtig mit solchen Funktionen und strtotime()
versuchen Sie zu "erraten", was Sie meinen (es wird natürlich nicht erraten, die Regeln sind hier ).
In der Tat 22-09-2008
wird als 22. September 2008 analysiert , da dies die einzig vernünftige Sache ist.
Wie wird 08-09-2008
analysiert? Voraussichtlich am 9. August 2008 .
Was ist mit 2008-09-50
? Einige Versionen von PHP analysieren dies als 20. Oktober 2008 .
Wenn Sie also sicher sind, dass Ihre Eingabe im DD-MM-YYYY
Format vorliegt , ist es besser, die von @Armin Ronacher angebotene Lösung zu verwenden .
dd-mm-yyyy
nicht mm-dd-yyyy
.
YYYY-mm-dd
Die Konvertierung wird nur für die Benutzer
Diese Methode funktioniert auf beiden Windows und Unix und ist Zeitzone bewusst, was wahrscheinlich ist , was Sie wollen , wenn Sie mit der Arbeit Daten .
Wenn Sie sich nicht für die Zeitzone interessieren oder die Zeitzone verwenden möchten, die Ihr Server verwendet:
$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 (Dies hängt von Ihrer Server-Zeitzone ab ...)
Wenn Sie angeben möchten, in welcher Zeitzone, hier EST. (Wie 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
Oder wenn Sie UTC verwenden möchten . (Wie " 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
Unabhängig davon ist es immer ein guter Ausgangspunkt, um beim Analysieren von Zeichenfolgen in strukturierte Daten streng zu sein. Dies kann in Zukunft umständliches Debuggen ersparen. Daher empfehle ich, immer das Datumsformat anzugeben.
Verwenden von mktime :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
strtotime()
Aus irgendeinem Grund strtotime()
funktioniert es an bestimmten Daten nicht und ist daher sehr unzuverlässig.
Mit der Funktion strtotime () können Sie Datum und Zeitstempel einfach konvertieren
<?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);
?>
Weitere Informationen: http://php.net/manual/en/function.strtotime.php
Online-Konvertierungstool: http://freeonlinetools24.com/
Hier ist eine sehr einfache und effektive Lösung mit den Funktionen split
und 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);
Es hat wie ein Zauber für mich funktioniert.
Da die Funktion unter strptime()
Windows nicht funktioniert und strtotime()
unerwartete Ergebnisse liefern kann, empfehle ich die Verwendung von 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']);
Wenn Sie sicher wissen möchten, ob ein Datum in etwas analysiert wird, das Sie erwarten, können Sie Folgendes verwenden 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
In diesem Fall ist es offensichtlich, aber es 03-04-2008
könnte zB der 3. April oder der 4. März sein, je nachdem, woher du kommst :)
Wenn Sie das Format kennen, verwenden Sie, strptime
weil strtotime
eine Vermutung für das Format, die möglicherweise nicht immer korrekt ist. Da strptime
es in Windows nicht implementiert ist, gibt es eine benutzerdefinierte Funktion
Denken Sie daran, dass der Rückgabewert tm_year
von 1900 ist! und tm_month
ist 0-11
Beispiel:
$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);
Verwenden Sie die PHP-Funktion 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
So würde ich es machen:
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'];
Auf diese Weise teilen Sie der Funktion mit, welches Datumsformat Sie verwenden, und geben sogar die Zeitzone an.
Bitte seien Sie vorsichtig mit der Zeit / Zone, wenn Sie festlegen, dass Daten in der Datenbank gespeichert werden, da beim Vergleichen von Daten aus MySQL, die in " timestamp
Verwendung" konvertiert wurden, ein Problem aufgetreten ist strtotime
. Sie müssen genau dieselbe Zeit / Zone verwenden, bevor Sie das Datum in einen Zeitstempel konvertieren. Andernfalls verwendet strtotime () die Standardserver-Zeitzone.
Bitte sehen Sie dieses Beispiel: 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)
Wenn Sie eine UTC datetime ( 2016-02-14T12:24:48.321Z
) in einen Zeitstempel konvertieren möchten , gehen Sie wie folgt vor :
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);