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

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

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

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

Ответы [ 3 ]

13 голосов
/ 23 октября 2008

Я бы сохранил даты в формате 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', ? ) 
) 

Где параметр один - int ($ unixDate)

4 голосов
/ 23 октября 2008

Я бы порекомендовал то же самое, что и я, для всех дат в любом механизме БД, нативный тип БД. (DATETIME)

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

-редактировать в ответ на комментарии ниже здесь -

  1. для выбранных столбцов вы можете использовать $timestamp = <a href="http://www.php.net/strtotime" rel="nofollow noreferrer">strtotime</a>( $yourColumnValue );
  2. я рекомендую хранить в собственном формате базы данных, потому что затем вы можете использовать SQL для сравнения записей, используя функции даты / времени SQL, такие как DATEADD () и т. Д.
2 голосов
/ 23 октября 2008

Привет и хорошего дня всем

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

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

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

ГГГГ - это год [все цифры, т.е. 2100] MM - месяц [01 (январь) до 12 (декабрь)] ДД - день от [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

Не больше .... Пока пока

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...