Php, дата манипуляции? - PullRequest
7 голосов
/ 26 июня 2009

Я новичок в php. И я хотел бы знать некоторые вещи манипуляции с датой в php.

// Get Current date
$date = date("Y-m-d");

Что если я хочу вычесть текущую дату и конкретную дату, скажем, «сегодня - 2008-06-26»?

  1. Как выполнять математические манипуляции с датами (сложение, минус, умножение и т. Д.) В php?

  2. Если сегодня подписчик подписывается на сегодняшнюю дату 2009-06-26, 1 неделю спустя, я хочу удалить его учетную запись из моей базы данных, как мне это сделать? (Я использую mysql)

  3. Что мы можем сделать, если сохраним дату пользователя в нашей базе данных? Например, мы можем сохранить дату bday пользователя, поэтому, когда в день bday мы отправили ему электронное письмо. Что еще может сделать свидание ??

Ответы [ 2 ]

12 голосов
/ 26 июня 2009

Прежде всего вам необходимо понять разницу между date(), time() и mktime().

date() используется только для отображения. Никогда не используйте его для математических манипуляций.

time() возвращает текущее значение timestamp (int представляет текущее время и дату).

mktime() без каких-либо параметров совпадает с time(). С параметрами, это позволяет вам получить timestamp за установленное время. Параметры в следующем порядке: час, минута, секунда, месяц, день, год.

Теперь ваши вопросы :

Вопрос 1

Чтобы манипулировать временем, вы можете сделать следующее:

$today = mktime(0,0,0); //Today, time neutral
$otherDate = mktime(0, 0, 0, 6, 26, 2008); //2008-06-26, time neutral

$secondsBetweenDates = $today - $otherDate;

Вопрос 2

Вам лучше делать что-то подобное прямо в вашем SQL. Вот способы, которыми вы можете сделать это для двух наиболее распространенных серверов баз данных, работающих на PHP. Я предполагаю, что DateSubscribed имеет правильный тип данных.

--- MySQL
DELETE FROM `subscribers`
    WHERE NOW() < DATE_ADD(`DateSubscribed`, INTERVAL 1 WEEKS);

--- PostgreSQL
DELETE FROM "subscribers"
    WHERE CURRENT_TIMESTAMP < ("DateSubscribed" + interval '1 week');

Вопрос 3

Это зависит от вашей СУБД. Вот страницы документации, относящиеся к функциям даты / времени для MySQL и PostgreSQL

3 голосов
/ 26 июня 2009

Q1: сначала преобразуйте даты в метки времени. Затем вы можете сделать математику с отметками времени и преобразовать их обратно в даты. Например:

$num_seconds_between = strtotime('today') - strtotime('2008-06-26');
$num_days_between = $num_seconds_between / 60 / 60 / 24;

Q2: Чтобы узнать дату удаления своего аккаунта (в базе данных в формате «дата / время»):

date('Y-m-d H:i:s', strtotime('+1 week', strtotime('2009-06-26')));

Затем вы можете удалить его любым способом. Похоже, вы можете использовать Cron Job .

Q3: Практически все, что вам нужно для этого. Если у вас есть конкретные вопросы по другим способностям, опубликуйте их здесь. Вы можете ознакомиться с руководством по PHP , чтобы узнать больше.

...