Каков предпочтительный формат для хранения даты/времени в базе данных SQL Server, когда PHP является вашим основным языком?

Я планирую приложение PHP, которое должно хранить дату/время в базе данных MSSQL. (Для любопытных это приложение календаря.) Каков предпочтительный формат для хранения этой информации?

MSSQL имеет собственный тип данных datetime, который хорошо работает в самой базе данных и очень читабельен. Однако нет никаких функций MSSQL для перевода значений даты и времени в предпочтительный формат PHP - отметка времени UNIX. Это делает его более болезненным для использования с PHP. Временная метка UNIX привлекательна тем, что нравится PHP, но она, конечно, не так читаема и не существует кучи приятных встроенных функций MSSQL для работы с данными.

Сохраняете ли вы эту информацию как тип данных даты и времени, как временные метки UNIX (как int, bigint или varchar datatype), так как оба формата бок о бок или как что-то еще?

Ответ 1

Я бы сохранил даты в формате MS-SQL, чтобы помочь вам максимально полно использовать функции обработки даты в T-SQL. Легче писать и читать

SELECT * FROM Foo
WHERE DateDiff(d,field1,now()) < 1

Чем пытаться выполнить эквивалентную операцию, манипулируя целыми числами

Чтобы преобразовать дату MsSQL в временную метку unix, используйте dateDiff:

SELECT DATEDIFF(s,'1970-01-01 00:00:00',fieldName) as fieldNameTS
FROM TableName
WHERE fieldName between '10/1/2008' and '10/31/2008'

Чтобы преобразовать временную метку Unix в дату MsSQL, вы можете либо сделать это в PHP:

$msSQLDate = date("Y-m-d H:i:s", $unixDate );

или в MsSQL

INSERT INTO TableName ( 
  fieldName
) VALUES (
  DATEADD(s,'1970-01-01 00:00:00', ? ) 
) 

Где параметр one - int ($ unixDate)

Ответ 2

Я бы порекомендовал то же самое, что и для всех дат в любом движке db, родном типе db. (DateTime)

Просто используйте "ГГГГ-ММ-ДД ЧЧ: ММ: СС" для вставки в php: date('Y-m-d H:i:s', $myTimeStampInSeconds);

-edit в ответ на комментарии ниже -

  • для выбранных столбцов вы можете использовать $timestamp = strtotime( $yourColumnValue );
  • Я рекомендую хранить в собственном формате базы данных, потому что тогда вы можете использовать SQL для сравнения записей с использованием функций даты и времени SQL, таких как DATEADD() и т.д.

Ответ 3

Привет и хороший день для всех

Да, возможно, это лучший способ, хранить даты в db, они будут принимать формат db, и вы можете форматировать, когда вам нужно, как вы

Но есть еще одно решение в международном формате даты, разработанном ISO, я имею в виду ISO 8601.

Международный формат, определенный ISO (ISO 8601), пытается решить все проблемы с датами, определяя систему числовых дат следующим образом: ГГГГ-ММ-ДД, где

ГГГГ - год [все цифры, т.е. 2100] ММ - месяц [01 (январь) до 12 (декабрь)] DD - день [01-31] ​​в зависимости от мотыльков: P

Использование числовых дат также имеет некоторые недостатки в отношении удобочитаемости и удобства использования, но это не идеально. Но формат даты ISO является лучшим выбором для представления даты, которое универсально (и точно) понятно.

Обратите внимание, что этот формат также может использоваться для представления точной даты и времени с информацией о часовом поясе

Вот подробная информация об ISO 8601: 2000

http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/date_and_time_format.htm

С не более.... До свидания