Сбой функции PHP strtotime

#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), хотя передача его a YYYY-MM-DD настолько однозначна, насколько это возможно.

Ответ №2:

Устанавливает день первым в месяце, т. е. если $ someYear равен ‘1999’, а $ someMonth равен ’01’, это даст

 strtotime("1999-01-01");
  

Комментарии:

1. Спасибо. Аналогично тому, что я спросил therefromhere , зачем указывать это, когда я получаю тот же результат при его исключении?

2. @PeanutsMonkey — вы можете записать дату во многих формах, т.е. strtotime («первый день января 1999») также допустим. Взгляните на руководство для получения дополнительных примеров php.net/manual/en/function.strtotime.php