#php #date
#php #Дата
Вопрос:
Я новичок в мире кодирования, а также PHP и сбит с толку тем, что '-01'
делает в приведенном ниже коде.
strtotime($someYear . '-' . $someMonth . '-01');
Комментарии:
1.Смотрите также: Форматы даты и времени, понятные
strtotime
,date_create
и конструктором объекта DateTime.2. Более чистый подход был бы
mktime(0,0,0,$someMonth,1,$someYear);
3. @Frank Farmer — Спасибо. Почему это считается более чистым?
4. некоторые считают ее более чистой, потому что это функция, которая принимает определенные аргументы в определенном порядке, в отличие от использования правил синтаксического анализа формата
strtotime
.
Ответ №1:
Выбирается первый день месяца.
.
является оператором конкатенации строк в PHP, и PHP автоматически преобразует числа в строки.
Итак, допустим, у вас было:
$someYear = 2011;
$someMonth = 5;
И вам нужна временная метка начала этого месяца, вы могли бы это сделать с помощью этого:
$someDate = $someYear . '-' . $someMonth . '-01'; // equivalent to "2011-5-01"
strtotime($someDate);
Это немного некрасиво, но это работает.
Комментарии:
1. @therefromhere — Спасибо. Но даже если я не укажу это, я все равно получу тот же результат. Так зачем указывать это?
2. @therefromhere — Спасибо. Это очень ясно, однако почему бы не написать это как
$someDate = $someYear . '-' . $someMonth . '-' .'01';
то-01
, что меня смутило, как какой-то вычет, например, менее 1 месяца или дня и т.д.3. @PeanutsMonkey, да, это быстрый и грязный подход. Лучше четко указывать свой формат, поскольку
strtotime
вы будете догадываться (что он делает, когда вы не указываете номер дня), но это может привести к путанице.4. @therefromhere — почему это «грязный подход»?
5. @Peanuts, некоторые, кто не знает
strtotime
правил форматирования или не доверяет им, считают это грязным. Лично я по некоторым причинам отношусь ко второму лагерю (поддерживаемые форматы со временем менялись, что означает, что некоторые форматы не работают в старых версиях PHP), хотя передача его aYYYY-MM-DD
настолько однозначна, насколько это возможно.
Ответ №2:
Устанавливает день первым в месяце, т. е. если $ someYear равен ‘1999’, а $ someMonth равен ’01’, это даст
strtotime("1999-01-01");
Комментарии:
1. Спасибо. Аналогично тому, что я спросил
therefromhere
, зачем указывать это, когда я получаю тот же результат при его исключении?2. @PeanutsMonkey — вы можете записать дату во многих формах, т.е. strtotime («первый день января 1999») также допустим. Взгляните на руководство для получения дополнительных примеров php.net/manual/en/function.strtotime.php