PHP를 사용하여 mysql 테이블에 타임 스탬프 저장


94

timestamp데이터 유형 이있는 MySQL 테이블에 필드가 있습니다. 그 테이블에 데이터를 저장하고 있습니다. 그러나 타임 스탬프 ( 1299762201428)를 레코드에 전달 하면 값 0000-00-00 00:00:00이 해당 테이블에 자동으로 저장됩니다 .

타임 스탬프를 MySQL 테이블에 어떻게 저장할 수 있습니까?

INSERT진술 은 다음과 같습니다 .

INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
       (2,5,9,'2',1299762201428,5,10,20,'1')

1
무슨 타임 스탬프 에 대해 말하고 있습니까? 어디서 났어?
Your Common Sense

1
여기에 테이블 구조를 붙여 넣을 수 있습니까?

답변:


160

이렇게 통과

date('Y-m-d H:i:s','1299762201428')

7
하지만 db에서 얻은 값은 열 유형이임을 보여줍니다. datetime변경하려는 경우 열 유형 을 timestamp다음으로 변경하십시오.varchar(15)
jimy

2
그런 다음 INT 필드에 넣으십시오. 어쨌든 타임 스탬프는 날짜를 나타내는 것일 뿐이며 그 반대의 경우도 마찬가지입니다. jimy가 말한 함수를 사용하여 타임 스탬프에서 날짜로 변환 할 수 있으며 다른 방법은 strtotime. 편집 : btw, 타임 스탬프는 가능한 모든 날짜 범위 만 포함합니다 (1970-01-01에서 xx-xx-2032까지)
Carlos Campderrós

4
그래서 타임 스탬프 데이터 유형의 사용은 무엇입니까? s_time 필드에는 타임 스탬프 데이터 유형이 있습니다. 1299762201428을 해당 필드에 저장할 수 없습니까?
gautamlakum 2011

@ lakum4stackof : 타임 스탬프 데이터 타입은 다음을 참조하십시오 dev.mysql.com/doc/refman/5.0/en/timestamp.html 세부 사항을 위해.
RollingBoy

1
@ lakum4stackof-타임 스탬프를 사용하면 타임 스탬프를 저장하지만 날짜로만 표시됩니다. 내부적으로 (모든 데이터 유형) 부호있는 정수로 저장됩니다. 타임 스탬프를 정수 형식으로 지정하려면 INT 필드 만 사용하는 것이 좋습니다. 타임 스탬프 열의 사용은 날짜 조작 (간격 추가 등)입니다.
Michael JV 2011

52

안녕하세요,이 FROM_UNIXTIME()기능을 사용하세요.

이렇게 :

INSERT INTO table_name
(id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES
(1,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1'), 
(2,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1')

이것이 왜 더 낫 date('Y-m-d H:i:s','1299762201428')습니까?
Yuri

5
유형 안전성 : FROM_UNIXTIMEPHP date()는 문자열을 반환하는 동안 네이티브 mysql 날짜 유형을 생성 합니다.
Richard Tuin 2016 년

5
웹 서버 (PHP)와 MySQL이 서로 다른 위치에있을 수 있기 때문에 더 좋습니다. 따라서 date ( 'Ymd H : i : s', '1299762201428')는 웹 서버의 TimeZone을 설정합니다. 다른 영역에 다른 웹 서버를 배치하면 데이터가 일치하지 않게됩니다. 또는 코드에서 애플리케이션 시간대를 MySQL 시간대로 강제 적용해야합니다. date_timezone_set
Ostico

18
$created_date = date("Y-m-d H:i:s");
$sql = "INSERT INTO $tbl_name(created_date)VALUES('$created_date')";
$result = mysql_query($sql);

15

명확히해야 할 몇 가지 :

  • MySQL 타임 스탬프 필드 유형은 유닉스 타임 스탬프가 아니라 datetime-kind 값을 저장합니다.
  • UNIX 타임 스탬프는 일반 int 유형의 숫자입니다.
  • 당신이 말하는 타임 스탬프는 일반적인 유닉스 타임 스탬프가 아니라 밀리 초 단위의 타임 스탬프입니다.

따라서 정답은

$timestamp = '1299762201428';
$date = date('Y-m-d H:i:s', substr($timestamp, 0, -3));

3

데이터 유형 ' bigint unsigned '는이 요구 사항에 적합 할 수 있습니다.


2

나는 당신이 값을 저장하려는 필드가 datetime 필드 가 아니라고 생각하지만 타임 스탬프에 대해서도 같은 것 같습니다 . 그렇다면 mysql은 형식이 년-월-일시 : 분 : 초가 될 것으로 예상합니다. 타임 스탬프를 저장하려면 다음과 같은 쿼리를 사용하여 필드를 숫자로 변환해야합니다.

alter table <table_name> change <field> <field> bigint unsigned

현재 시간을 사용하는 경우 now () 또는 current_timestamp를 사용할 수 있습니다.


2

now()쿼리에서도 사용할 수 있습니다 .

insert into table (time) values(now());

현재 타임 스탬프를 사용합니다.


1

사용하다 FROM_UNIXTIME() .

참고 : 1299762201428은 밀리 초 타임 스탬프 (JavaScript의 Date () * 1과 같은)처럼 보이며이를 1000으로 나누어야합니다.


1

테이블의 필드 유형을 확인하면 타임 스탬프 값이 데이터 유형에 저장됩니다 bigint.

datetime유형이 아님



0

타임 스탬프가 현재 시간이면 mysql NOW()함수를 사용할 수 있습니다.


0

datetime필드 유형을 사용하십시오 . 인간의 가독성 (아무도 타임 스탬프를 읽지 않음) 및 MySQL 기능 과 같은 많은 이점이 있습니다 .

유닉스 타임 스탬프에서 변환하려면 MySQL 함수를 사용할 수 있습니다 FROM_UNIXTIME(1299762201428). 다시 변환하려면 사용할 수 있습니다 UNIX_TIMESTAMP: SELECT UNIX_TIMESTAMP(t_time) FROM table_name.

물론 MySQL 기능이 마음에 들지 않으면 항상 PHP :를 사용할 수 있습니다 'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp).


timestamp 필드 타입 (사용하는 경우 너무 읽을 수있는 인간 SELECT콘솔에서). 그들은 매우 다르며 둘 다 장단점이 있습니다. 주요 차이점은 시간대가 처리되는 방식입니다.
Udo G

@Udo G : 맞아요.하지만 여전히 datetime여러 가지 이유로 선호 합니다. 귀하의 의견에서 가장 큰 단점 / 단점은 무엇입니까?
Znarkus 2011

가장 큰 장점 timestamp: 서버와 클라이언트 모두의 시간대 설정에 영향을받지 않기 때문에 PHP 타임 스탬프와 더 잘 일치하는 반면 MySQL 클라이언트의 시간대에 따라 표시되는 값이 datetime변경 됩니다 (물론 프로젝트에 따라 달라집니다. 하나가 더 좋습니다). 가장 큰 단점 timestamp: NULL 값을 지원하지 않으며 (이 프로그램을 프로그래밍했을 때 무엇을 연기했는지 모르겠습니다) TIMESTAMP NOT NULL필드가 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP. 내 경우에는 내가 불행하게도 이 필요 사용하는 TIMESTAMPTZ 이유로.
Udo G

0

데이터 유형을 사용하는 것이 더 좋습니다 varchar(15).


3
숫자를 문자열 형태로 저장하는 것은 일반적으로 좋은 방법이 아닙니다. 문자열은 비교 속도가 느리고 계산을 수행하기가 더 어렵 기 때문입니다.
RollingBoy 2011-04-12

내 투표는 unsigned int로 간다.하지만 토끼 굴로 가자. 왜 char가 아닌 varchar입니까? 고정 길이 항목입니다. 마이크로 최적화이지만 여전히 ...
BradChesney79

0

다음을 수행 할 수 있습니다 $date = \gmdate(\DATE_ISO8601);..


-1

데이터베이스가 MySQL이라는 것을 알고 있으면 다음과 같이 NOW () 함수를 사용합니다.

INSERT INTO table_name
   (id, name, created_at) 
VALUES 
   (1, 'Gordon', NOW()) 

이것은 OP가 요구하는 것이 아니라 현재 타임 스탬프 만 저장합니다.
charliefortune
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.