Какой тип данных следует использовать для сохранения значения unix_timestamp
(MySQL)?
Каков тип данных для unix_timestamp (MySQL)?
Ответы (4)
тип целочисленный, например:
int(11)
подходит для индексации и таких условий, как > < =
int(11)
до 12 или 13 не будет разумной мерой, чтобы избежать ситуации?
- person Brad Hein; 29.11.2017
Вы хотите использовать тип данных TIMESTAMP.
Это хранится как значение эпохи, но MySQL отображает значение как «ГГГГ-ММ-ДД ЧЧ:ММ:СС».
Тип данных MySql DateTime хранит дату в формате «ГГГГ-ММ-ДД ЧЧ:ММ:СС» в диапазоне от «1000-01-01 00:00:00» до «9999-12-31». 23:59:59'.
Тип данных MySql TIMESTAMP хранит дату в формате «ГГГГ-ММ-ДД ЧЧ:ММ:СС» в диапазоне от «1970-01-01 00:00:01» UTC до «2038-01-». 19 03:14:07' UTC.
Unix TIMESTAMP – это количество секунд, прошедших с 1970-01-01
. Если вы хотите сохранить временную метку unix в mysql
db, вам следует использовать int(11)
с атрибутом UNSIGNED
(чтобы разрешить только положительные числа), и если вы хотите сохранить количество микросекунд, которое вы должны использовать bigint(20)
,..
Если вы хотите получить unixtimestamp
в удобочитаемом формате в выбранном запросе, вы можете использовать
SELECT FROM_UNIXTIME(CAST(yourtable.start_time as UNSIGNED)) as date_time
Если вы используете php
, вы можете использовать:
$unixtimestamp= time();//1544619186
echo(date("Y-m-d", $unixtimestamp));//2018-12-12
Если вы хотите отображать дату и время с использованием местного часового пояса в Javascript, используйте эту функцию.
function timeConverter(UNIX_timestamp){
var date = new Date(UNIX_timestamp*1000);
var year = date.getFullYear();
var month = ("0"+(date.getMonth()+1)).substr(-2);
var day = ("0"+date.getDate()).substr(-2);
var hour = ("0"+date.getHours()).substr(-2);
var minutes = ("0"+date.getMinutes()).substr(-2);
var seconds = ("0"+date.getSeconds()).substr(-2);
return year+"-"+month+"-"+day+" "+hour+":"+minutes+":"+seconds;
}
console.log(timeConverter(value));// 2018-14-12 13:11:33
(В этом случае сервер должен вернуть unixTimestamp как есть: SELECT yourtable.start_time as date_time
)
BIGINT UNSIGNED NOT NULL
Представление эпохи в секундах может поместиться в INT(11). Если метка времени имеет миллисекунды, INT(11) не работает в MySQL.