MySQL mendapatkan tanggal n hari yang lalu sebagai stempel waktu


99

Di MySQL, bagaimana saya mendapatkan stempel waktu dari, katakanlah 30 hari yang lalu?

Sesuatu seperti:

select now() - 30

Hasilnya harus mengembalikan stempel waktu.


Saya pikir Anda setelah DATE_SUB .
joeslice

1
Format cap waktu apa? Ada format yang sudah dikenal orang-orang yang bekerja dengan fungsi MySQL DATE, dan ada stempel waktu gaya UNIX.
joebert

Saya mengejar Stempel Waktu MySQL.
Ben Noland

Jawaban:


181

DATE_SUB akan melakukan sebagian tergantung pada apa yang Anda inginkan

mysql> SELECT DATE_SUB(NOW(), INTERVAL 30 day);
2009-06-07 21:55:09

mysql> SELECT TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 day));
2009-06-07 21:55:09

mysql> SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 day));
1244433347

11
Apa bedanya dengan kueri pertama dan kedua?
Codler

5
tampaknya (v1) DATE_SUB akan mengembalikan DATETIME atau STRING tergantung pada input. TIMESTAMP (v2) memaksanya menjadi tipe TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/…
jsh

3

Anda bisa menggunakan:

SELECT unix_timestamp(now()) - unix_timestamp(maketime(_,_,_));

Untuk stempel waktu unix atau:

SELECT addtime(now(),maketime(_,_,_));

Untuk format tanggal standar MySQL.


0

Jika Anda membutuhkan jam negatif dari cap waktu

mysql>SELECT now( ) , FROM_UNIXTIME( 1364814799 ) , HOUR( TIMEDIFF( now( ) , FROM_UNIXTIME( 1364814799 ) ) ) , TIMESTAMPDIFF( HOUR , now( ) , FROM_UNIXTIME( 1364814799 ) ) 
2013-06-19 22:44:15     2013-04-01 14:13:19     1904    -1904

ini

TIMESTAMPDIFF( HOUR , now( ) , FROM_UNIXTIME( 1364814799 ) ) 

akan mengembalikan nilai negatif dan positif, jika Anda perlu menggunakan x> this_timestamp

tapi ini

HOUR( TIMEDIFF( now() , FROM_UNIXTIME( 1364814799 ) ) )

akan kembali hanya positif, jam

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.