2016-03-17 19 views
0

我有一個字母的字符串,然後在一個月之後一年:UNIX時間戳從自定義字符串PHP

$followUpDate = 'M12-16' 

我分手的月份和年份:

$datestrip = explode("-", $followUpDate); 
$part1  = substr($datestrip[0], 1); // Gives Month 
$part2  = $datestrip[1]; // Gives Year 

現在,我已經打破了月份和年份。我需要獲得所述月份和年份的unix時間戳。

因此,對於這個例子中,UNIX時間戳的結果應該是1480568400.

預先感謝您!

回答

1

您可以使用DateTime::createFromFormat()(前面已經提到其他的答案)。但是,你必須注意一些小的細節。

由於您解析了包含部分日期的字符串(僅指定了月份和年份),因此默認情況下,其餘字段(月,小時,分鐘,秒的日期)時間。很可能,這不是你想要的。我想你想得到本月的開始(第1天,午夜)。

您可以通過在format string前加一個感嘆號(!)來獲得此信息。它將所有日期組件重置爲Unix紀元(1970-01-01 00:00:00 UTC)。

此外,DateTime::createFromFormat()的第三個參數是要使用的時區。如果您不通過,PHP將使用在php.ini中設置的默認時區或上一次撥打date_default_timezone_set()(如果有)。這可能也可能不是你需要的。

$followUpDate = 'M12-16'; 

// It seems like your timezone is US/Eastern (GMT+5 during the winter) 
$timezone = new DateTimeZone('US/Eastern'); 

// Create a DateTime out of the provided string 
// The "!" character in front of the format resets all the fields 
// to the Unix epoch (1970-01-01 00:00:00 UTC) before parsing the string 
$date = DateTime::createFromFormat('!\Mm-y', $followUpdate, $timezone); 

// Display it; it displays 1480568400 
echo($date->format("U")); 
0

看一看strtotime

$timestamp = strtotime("2016-12"); 
echo date("Y-m-d", $timestamp); // prints 2016-12-01 

牢記您的時區的設置;)

你也可以使用PHP的DateTime類去一個更可讀的辦法:

$date = new \DateTime(); 
$date->setDate(2016, 12, 01); 
echo $date->format("Y-m-d"); // similiar to above 
0

做了一些假設,但下面的代碼應該適合你:

$followUpDate = 'M12-16'; 
$d = DateTime::createFromFormat('\Mm-y-d H:i:s', $followUpDate . '-01 00:00:00'); 

echo $d->format('U'); 

我肯定會建議使用DateTime而不是date(),因爲它給了你額外的靈活性。

0

下面是一個小的代碼片段,這將有助於你對你的快樂的方式:

// Define your date 
$followUpDate = 'M12-16' 

// Convert your date to a DateTime object 
$date = DateTime::createFromFormat('\Mm-y', $followUpdate); 

// Output 
echo $date->format('Y-m-d');