user947462
user947462

Reputation: 949

Unique ID with time()

If I use:

$t = time();
echo $t;

This will output something like: 1319390934

I have two questions:

  1. This value can be used as unique id ?
  2. how to generate from it a date?

I can't use uniqid(), because I need a value that can be used to order (recent).

Upvotes: 6

Views: 24703

Answers (4)

Jens Törnell
Jens Törnell

Reputation: 24778

I would probably do this:

$id = microtime();

Upvotes: 0

Seralize
Seralize

Reputation: 1127

Using time() as mentioned will give you a sortable way to create unique IDs. Concatenating strings will also further randomize your desired result and still keep it sortable:

$uniqueId= time().'-'.mt_rand();

Upvotes: 15

Patrick Moore
Patrick Moore

Reputation: 13354

If you are using this code in an environment where you have a user account with a unique ID, you can append time() to their account ID to generate a unique ID.

You can turn time() back into a date string using:

$time = time();
echo 'The datestamp for (' . $time . ') is ' . date("Y-m-d", $time);

Of course the date format can be altered using any of PHP's date() format.

Upvotes: 1

Jon
Jon

Reputation: 437554

  1. Obviously this cannot be used as a "unique" id because, well, it's not unique during the duration of the same second.
  2. Look into date.

If you want something that is advertised as a unique id and both can be sorted, you can use something like this that involves uniqid:

$u = time().'-'.uniqid(true);

I 'm perhaps over-simplifying here, taking for granted that all values time is going to produce will have the same number of digits (so that a string sort would produce the same results as a natural sort). If you don't want to make this assumption, then you could consider

$u = sprintf("%010s-%s", time(), uniqid(true));

Upvotes: 4

Related Questions