Лучшая практика для управления датой и днями
Я работаю над проектом, в котором мне нужно управлять многими операциями. Каждая операция имеет дату окончания и состоит из определенного количества задач.
Я хочу отображать напоминания (текст, отображаемый на экране), если задача не была выполнена ранее [end date]
- X days
,
Все данные хранятся в базе данных MySQL, и я работаю с PHP иHTML5.
- Какой тип данных лучше всего подходит для работы с датой и днями (для выполнения расчетов)?
- Могу ли я работать с
Date()
и вычитать дни простым способом?
У меня нет конкретного технического вопроса, но я думаю, что делиться лучшим способом - это хорошо, правда?
Мне любопытно узнать, как лучше поступить и открыться для любого предложения!
3 ответа
Я рекомендую хранить вашу дату в mysql в поле timestamp, потому что вы можете использовать значение по умолчанию CURRENT_TIMESTAMP - это очень полезно, и я думаю, что вам не стоит об этом беспокоиться, есть множество функций:
MySQL:
select now();
+---------------------+
| now() |
+---------------------+
| 2015-04-08 12:13:18 |
+---------------------+
select now() - interval 1 day;
+------------------------+
| now() - interval 1 day |
+------------------------+
| 2015-04-07 12:13:29 |
+------------------------+
select now() - interval 7 day;
+------------------------+
| now() - interval 7 day |
+------------------------+
| 2015-04-01 12:13:38 |
+------------------------+
select now() - interval 1 month;
+--------------------------+
| now() - interval 1 month |
+--------------------------+
| 2015-03-08 12:13:58 |
+--------------------------+
PHP:
<?php
var_export([
date('Y-m-d H:i:s', strtotime('now')),
date('Y-m-d H:i:s', strtotime('- 1 day')),
date('Y-m-d H:i:s', strtotime('- 7 day')),
date('Y-m-d H:i:s', strtotime('- 1 month')),
]);
/*
Result:
array (
0 => '2015-04-08 15:15:42',
1 => '2015-04-07 15:15:42',
2 => '2015-04-01 15:15:42',
3 => '2015-03-08 15:15:42',
)
*/
И иногда очень полезно создать таблицу, например:
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
в результате ваше поле ts будет автоматически установлено и обновлено...
Вы можете хранить даты как DATETIME в вашей базе данных.
Затем в PHP преобразуйте его в управляемые данные, используя функции strtotime() и date()
Лучший тип данных для работы - это класс DateTime.
Для выполнения вычитаний с использованием класса DateTime вам необходимо использовать класс DateInterval.
Вам понадобится некоторое время, чтобы освоиться с этими двумя классами, но это облегчит операции с форматированием или датами после леса.