Wie erhalte ich einen Zeitstempel von z. 22-09-2008
?
PHP's strtotime()
gibt
$timestamp = strtotime('22-09-2008');
Welches funktioniert mit den unterstützten Datums- und Zeitformaten Docs .
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);
Mit DateTime
API :
$dateTime = new DateTime('2008-09-22');
echo $dateTime->format('U');
// or
$date = new DateTime('2008-09-22');
echo $date->getTimestamp();
Dasselbe mit der prozeduralen 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 nicht der Fall ist, weil Sie ein nicht unterstütztes Format verwenden, können Sie dies 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');
Wenn Sie den !
nicht einstellen, wird der Zeitanteil auf die aktuelle Uhrzeit gesetzt, 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 die einfachere Wahl.
Seien Sie vorsichtig mit Funktionen wie strtotime()
, die versuchen zu "erraten", was Sie meinen (natürlich nicht, die Regeln sind hier ).
Tatsächlich wird 22-09-2008
als 22 September 2008 analysiert, da dies das einzig Vernünftige ist.
Wie wird 08-09-2008
analysiert? Wahrscheinlich 09 August 2008.
Was ist mit 2008-09-50
? Einige Versionen von PHP analysieren dies als 20 October 2008.
Wenn Sie sich also sicher sind, dass Ihre Eingabe im DD-MM-YYYY
-Format vorliegt, sollten Sie die von @Armin Ronacher angebotene Lösung verwenden.
Wenn Sie PHP 5.3 oder höher haben,
Diese Methode funktioniert auf beides Windows und Unix und ist Zeitzone . Dies ist wahrscheinlich das, was Sie wollen, wenn Sie ernsthaft mit Daten arbeiten.
Wenn Sie sich nicht für die Zeitzone interessieren oder die von Ihrem Server verwendete Zeitzone verwenden möchten:
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();
1222093324 (Dies hängt von Ihrer Serverzeitzone ab ...)
Wenn Sie angeben möchten, in welcher Zeitzone, hier EST. (Wie New York.)
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST'));
echo $d->getTimestamp();
1222093305
Oder wenn Sie UTC verwenden möchten. (Gleich wie "GMT".)
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC'));
echo $d->getTimestamp();
1222093289
Verwenden von mktime :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
Mit der Funktion strtotime () können Sie das Datum leicht in einen Zeitstempel 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/de/function.strtotime.php
Online-Konvertierungstool: http://freeonlinetools24.com/
Hier ist eine sehr einfache und effektive Lösung, die die Funktionen split
und mtime
verwendet:
$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 funktionierte für mich wie ein Zauber.
Da die Funktion strptime()
für Windows nicht funktioniert und strtotime()
unerwartete Ergebnisse zurückgeben kann, empfehle ich 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 genau wissen möchten, ob ein Datum in etwas umgewandelt wird, das Sie erwarten, können Sie DateTime::createFromFormat()
verwenden:
$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
Es ist offensichtlich in diesem Fall, aber z.B. 03-04-2008
könnte der 3. April oder der 4. März sein, je nachdem wo du herkommst :)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
Wenn Sie das Format kennen, verwenden Sie strptime
, da strtotime
eine Schätzung für das Format vornimmt, was möglicherweise nicht immer korrekt ist. Da strptime
nicht in Windows implementiert ist, gibt es eine benutzerdefinierte Funktion
Denken Sie daran, dass der Rückgabewert tm_year
von 1900 stammt! 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)
$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
So mache ich es:
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 können Sie der Funktion mitteilen, welches Datumsformat Sie verwenden, und sogar die Zeitzone angeben.
<?php echo date('U') ?>
Wenn Sie möchten, geben Sie ihn in einen Zeitstempel des Typs MySQL ein. Das Obige funktioniert sehr gut (nur in PHP 5 oder höher):
<?php $timestamp_for_mysql = date('c') ?>
Bitte achten Sie auf die Zeit/Zone, wenn Sie Datumsangaben in der Datenbank speichern, da ich ein Problem habe, als ich Daten aus mysql verglich, die mit timestamp
in strtotime
konvertiert wurden. Sie müssen genau dieselbe Zeit/Zone verwenden, bevor Sie das Datum in einen Zeitstempel konvertieren. Andernfalls verwendet strtotime () die Standard-Serverzeitzone.
Bitte sehen Sie sich dieses Beispiel an: 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)
Benutze PHP function strtotime ()
echo Strtotime ('2019/06/06');