2016-03-17 2 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 

держать часовой пояс-настройки в виду;)

Вы могли бы также пойти на более читаемом подхода с использованием 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');