2009-12-31 5 views
1

나는 PHP/MySQL에서 2 년 동안 일해 온 소셜 네트워크 사이트를 가지고 있는데, 처음부터 다시 전체 사이트를 재구성하고있다. 이번에는 사용자가 내 사이트에서 시간대를 설정하는 기능을 추가하고 싶습니다.PHP가있는지도에서 시간대 설정을 할 수 있습니까?

이렇게 말하면, 내가해야 할 단계를 처음부터 끝까지 안내해 줄 것을 요청하고 있습니다. 내 옛날 사이트는 모든 날짜와 시간에 대해 mysql datetime을 사용했으며 훌륭하게 작동했지만 텍스트로 작성하여 모든 날짜와 시간을 UTC와 함께 저장하는 것이 가장 좋음을 읽었습니다. 어떻게하면이 작업을 수행 할 수 있는지 설명 할 수 있습니까? PHP에서 now() 함수를 사용하여 mysql에 시간을 절약 할 수 있습니까?

또한 php가 모든 시간대를 생성 할 수있는 목록을 보았습니다. (실제로는 아니지만) 100 만 개가 표시되지만 궁금한 점은 이미지 또는 무언가가있는지도를 표시 할 수 있습니까? 주요 시간대 링크

사용자 시간대를 설정하기위한 팁을 알려주세요. 그 부분을 할 수 있지만, 일단 사용자의 시간대를 저장하고 사용할 준비가되면 사용자에게 정확한 시간과 시간을 저장하는 방법을 알려줄 수 있습니다. 정확한 시간.

죄송합니다. 혼란 스러울 경우 도움이 될 것입니다. 감사합니다.

+0

나는 당신이 시간대로하고 싶은 것을 이해하지 못합니다. 사용자가 시간대와 관련된 시간을 표시하도록 사이트를 구성하도록 허용 하시겠습니까? –

답변

2

php로 작업 할 때, 데이터베이스에서 int로 time()으로 생성 된 타임 스탬프를 저장하는 것이 가장 좋습니다. 데이타베이스를 보았을 때 그것들을 읽는 것이 쉽지는 않지만 (숫자만으로 실제 날짜를 추측 할 수는 없지만), 타임 스탬프는 PHP로 날짜를 가지고 작업 할 때 가장 원시적 인 것입니다.

각 사용자의 시간대를 저장하려면 몇 시간 단위로 오프셋을 저장하거나 시간 단위로 표시되는 시간대를 분 단위로 저장하는 것이 좋습니다. 그래서 예를 들어 내 시간대 오프셋은 +60 (UTC + 1)이고, 미국에서는 대부분 -480 (UTC-8) 또는 비슷한 것이 있습니다.

사용자의 시간을 표시 할 때 표준 시간대 (UTC 시간)와 표준 시간대 오프셋을 선택하고 표준 date() 형식 지정 기능을 사용하여 읽을 수있는 날짜를 생성하면됩니다. 예를 들어

: 모든 사용자가 자신이 좋아하는 형식을 선택할 수 있도록 다음 또한, 데이터베이스의 형식 문자열 (d.m.Y H:i)을 저장할 수 또한

<?php 
$time = time(); // from database or time() for "now" 
$offset = -480; // from database 

// add the offset to the time you want to display and you have the user's time 
echo date('d.m.Y H:i', $time + $offset * 60); 
?> 

.

+0

나는이 아이디어가 마음에 든다. 나는 당신의 예제에서 시간()이 있지만 DB에서 말 하겠지만, 그 부분에 혼란 스럽다. 사용자와 함께 저장된 유일한 것은 오프셋이 아니다. ? 또한 귀하의 예제에서 gmdate() 함수 또한 더하기/빼기를 ​​수행하고 있습니까? 감사합니다 – JasonDavis

+0

죄송합니다,'gmdate'는 (텍스트에서 설명한대로) 간단한'date'로되어 있었고,'60'으로 초당 오프셋을 곱하는 것을 잊었습니다 - 이제는 그것을 고쳤습니다. 계산은 시간 소인에 대해서만 수행되므로 다른 시간 인 것처럼 나타나게하려면 날짜 함수에서 시간 소인을 변경하십시오. 그리고 데이터베이스에서'time()'을 사용하여, 게시물이나 뭔가를 표시 할 때 날짜가 있으면 일반적으로 데이터베이스에도 저장합니다. 그런 경우에는 거기에서옵니다.) – poke

+0

오, 알았습니다. , 내가 왜 안했는지 모르겠지만, 덕분에 이것이 효과가있다. – JasonDavis

2

이 항목은 일광 절약 시간과 서버가 일부 구성원과 다른 표준 시간대를 사용한다는 사실을 고려할 때 특히 복잡해집니다.

이러한 문제를 처리하기 위해 만들어진 라이브러리를 살펴 보시기 바랍니다. PEAR 패키지 Date를 시작하는 것이 좋습니다. http://pear.php.net/package/Date

기본적으로 회원은 프로필에 대해 시간대를 선택해야합니다. 그런 다음 모든 시간을 UTC (서버 위치의 오프셋을 제거하기 위해)로 변환하고 데이터베이스에 시간 소인으로 저장하십시오. 시간을 표시 할 때 날짜 표시 형식뿐만 아니라 구성원이 스스로 선택한 시간대 오프셋 (기본값은 UTC 일 수도 있음)을 적용하십시오.

관련 문제