web-dev-qa-db-ger.com

Wie konvertiere ich das Datum in einen Zeitstempel in PHP?

Wie erhalte ich einen Zeitstempel von z. 22-09-2008?

308
Wizard4U

PHP's strtotime() gibt

$timestamp = strtotime('22-09-2008');

Welches funktioniert mit den unterstützten Datums- und Zeitformaten Docs .

568
Owen

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);
180
Armin Ronacher

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.

120
Gordon

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.

114
daremon


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


47
Prof. Falken

Verwenden von mktime :

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
43
Till

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/

17
klit67

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.

13
Victor Bojica

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']);
7
Victor

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 :)

6
Ja͢ck
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>

http://php.net/manual/de/function.date.php

5

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)
5
blavla
$time = '22-09-2008';
echo strtotime($time);
5
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
4
Phil Jackson

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.

4
<?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') ?>
4
insign

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)
1
Akam

Benutze PHP function strtotime ()

echo Strtotime ('2019/06/06');

Datum - Formatiere eine Ortszeit/Datum

0
Gurpreet Singh