2017-04-18 4 views
0

Ich versuche, ein Datum von Array zu erstellen. Gibt es irgendeine Funktion, die dies erreichen könnte? Was ich weiß ist, dass ich auf Felder zugreifen und Datum von diesem erstellen kann.Erstellen Sie ein neues Datum von PHP-Array

'endDate' => array(
     'month' => '05', 
     'day' => '30', 
     'year' => '2017', 
     'hour' => '10', 
     'min' => '48', 
     'meridian' => 'pm' 
    ) 
+0

Suchen Sie so etwas wie dieses http://stackoverflow.com/questions/11322777/how- to-convert-a-date-array-das-wurde-von-date-parse-back-in-a-date-s zurückgegeben – cpap

+0

http://php.net/manual/en/function.mktime.php – AbraCadaver

+1

Auch dies könnte den Trick http://php.net/manual/en/datetime.createfromformat.php –

Antwort

1

benutzte ich DateTime::createFromFormat und vsprintf eine Zeitfolge aus dem Array zu konstruieren, und kam mit dieser:

<?php 
$endDate = array(
    'month' => '05', 
    'day' => '30', 
    'year' => '2017', 
    'hour' => '10', 
    'min' => '48', 
    'meridian' => 'pm' 
); 

$date = DateTime::createFromFormat('d/m/Y h:i a', vsprintf('%s/%s/%s %s:%s %s', [ 
    $endDate['day'], 
    $endDate['month'], 
    $endDate['year'], 
    $endDate['hour'], 
    $endDate['min'], 
    $endDate['meridian'], 
])); 

echo $date->format('d/m/Y h:i a'); 

Ausgänge (und Sie können das Format zwicken:

30/05/2017 10:48 pm 

Eigentlich müssen Sie wahrscheinlich nicht einmal DateTime verwenden, aber ich würde vorschlagen, dass Sie tun, wie Sie es dann weiter manipulieren können (fügen Sie Zeitintervalle hinzu oder ändern Sie die Fo RMAT), könnten Sie wahrscheinlich nur tun:

printf('%s/%s/%s %s:%s %s', [ 
    $endDate['day'], 
    $endDate['month'], 
    $endDate['year'], 
    $endDate['hour'], 
    $endDate['min'], 
    $endDate['meridian'], 
] 

Demo: https://eval.in/778600

+0

gibt es eine Möglichkeit, um zu konvertieren das Ergebnis in Millisekunden. Ergebnis: ''18/04/2017 04:48 pm'' – kamboj

0

Sie können Ihren Wert in einen Valutatag String zusammenbauen dann eine neue Instanz von DateTime von strtotime Anruf erstellen.

$endtime = [ 
    'month' => '05', 
    'day' => '30', 
    'year' => '2017', 
    'hour' => '10', 
    'min' => '48', 
    'meridian' => 'pm' 
]; 
$datetime = DateTime::createFromFormat("Y-m-d h:i A", "{$endtime['year']}-{$endtime['month']}-{$endtime['day']} {$endtime['hour']}:{$endtime['min']} {$endtime['meridian']}"); 
$time = strtotime("{$endtime['year']}-{$endtime['month']}-{$endtime['day']} {$endtime['hour']}:{$endtime['min']} {$endtime['meridian']}"); 
0

Es gibt keine API-Funktion, die das erreichen kann. Sie könnten Ihre eigene Methode implementieren, in denen sollte wie folgt aussehen:

/** 
* Convert given array to DateTimeObject 
* @param $dateArr array containing 'day', 'month', 'year', 'hour', 'min', 'meridian' 
* @return DateTime object 
* 
* 'day' and 'month' must always be 2 numbers 
* 'year' must always be 4 numbers 
* 'hour' must always be 2 numbers (01-12) 
* 'min' must always be 2 numbers (00-59) 
* 'meridian' must always be 2 letters ('am' or 'pm') 
*/ 
function createEndDate($dateArr) { 
    return DateTime::createFromFormat('dmYhia', 
     $dateArr['day'] . 
     $dateArr['month'] . 
     $dateArr['year'] . 
     $dateArr['hour'] . 
     $dateArr['min'] . 
     strtolower($dateArr['meridian'])); 
} 

Code-Beispiel:

$yourArr => array(
    'month' => '05', 
    'day' => '30', 
    'year' => '2017', 
    'hour' => '10', 
    'min' => '48', 
    'meridian' => 'pm' 
) 

$endDate = createEndDate($yourArr); 
// see http://php.net/manual/de/class.datetime.php for docs 
echo $endDate->format('u'); 
Verwandte Themen