|
|
#1 |
|
Huge Clucker
![]() ![]() ![]() Join Date: Nov 2010
Location: London, UK
Posts: 243
Reputation: 17
|
How to: Unix timestamps Tutorial by __ Introduction A lot of you may not understand how useful Unix timestamps actually are, which is why I am creating this tutorial. Contents of this tutorial
Unix time (or 'POSIX time') is essentially a timescale, from January 1, 1970 to January 19, 2038 (if you're using 32-bit timestamps, see here for more information). Unix timestamps are integers (numbers) that basically state the amount of seconds it has been since the 1st of January 1970, these are very useful in programming and are used by loads of scripters/coders/programmers. Despite the simplicity of Unix timestamps, some scripters still use more complicated and less efficient methods, for example - storing days, hours, minutes, seconds and years and trying to calculate with those as variables, instead of using a single Unix timestamp - which would generally speaking be a lot more efficient. An example of a Unix timestamp is: 1305302089 Why, when and how you should use them How you can use them Scenario: Temporary VIP - A feature quite a few servers have, an admin retains the ability to give someone a special rank temporarily, after X the rank expires and they no longer have access to it. The code for this scenario can be found here. Note, the code wasn't tested - it was only compiled. Unix timestamps are very effective in PAWN, using gettime() without any parameters (so literally just 'gettime();', with or without the semi colon) returns a Unix timestamp. Why you should use them What's the point in creating multiple variables that you don't really need? All you really need is 1 long integer. When you should use them Whenever you have something that isn't indefinite award a player, I've written a short list of some examples, though do note there are many more uses for Unix timestamps in PAWN/SA-MP:
Add these on to gettime() to calculate the appropriate times. 1 minute (60 seconds) is 60 * 1 = 60 2 minutes (120 seconds) is 60 * 2 = 120 1 hour (60 minutes) is 60 * 60 = 3600 2 hours (120 minutes) is 60 * 120 = 7200 1 day (24 hours) is 60 * 60 * 24 = 86400 2 days (48 hours) is 60 * 60 * 48 = 172800 1 week (7 days) is 60 * 60 * 24 * 7 = 604800 2 weeks (14 days) is 60 * 60 * 24 * 14 = 1209600 1 month (30 days) is 60 * 60 * 24 * 30 = 2592000 2 months (60 days) is 60 * 60 * 24 * 60 = 5184000 1 year (365 days) is 60 * 60 * 24 * 365 = 31536000 2 years (730 days) is 60 * 60 * 24 * 730 = 63072000 An example: pawn Code:
In PHP and a few similar languages, you can decode unix timestamps to dates by using the date() function with your timestamp as an extra parameter, unfortunately - there are no native functions in PAWN that can do this. Thanks to Blacklite, a function has been provided which you can use to compare two timestamps (for example, your timestamp that you saved and the current timestamp) to get the amount of time in between the timestamps. Note, the function has a 'compare' parameter which if empty gets the current timestamp anyway. The code is available here, full credits belong to Blacklite for releasing the function in this topic and for creating it. Theoretically (seeing as I haven't tested it), you should be able to use: pawn Code:
Last edited by __; 02/05/2012 at 06:55 PM. |
|
|
|
|
|
#2 |
|
Huge Clucker
![]() ![]() ![]() Join Date: Feb 2009
Location: Novorossiysk
Posts: 405
Reputation: 9
|
How to add to the current unixstamp 30 days?
|
|
|
|
|
|
#3 |
|
Guest
Posts: n/a
|
Nice work. But maybe add a section for calculating how many minutes/hours/days/weeks etc. has passed since the unix timestamp was set?
|
|
|
|
#4 |
|
Huge Clucker
![]() ![]() ![]() Join Date: Nov 2010
Location: London, UK
Posts: 243
Reputation: 17
|
86400 * 30 = 2592000
Do you mean some calculations to help figure out how much to add on to a timestamp or what? I didn't quite understand your message if you meant something else. |
|
|
|
|
|
#5 |
|
Guest
Posts: n/a
|
I mean like (for example, take a temporaly ban system). You ban the player for 2 weeks, 3 days and 2 hours. How would you go around detecting how many weeks, days and hours that has passed since the unix timestamp was set (the ban date).
|
|
|
|
#6 |
|
Huge Clucker
![]() ![]() ![]() Join Date: Nov 2010
Location: London, UK
Posts: 243
Reputation: 17
|
I've added a list of calculations now, so it should be a bit more clear, but for your predicament, if you had a command with the syntax of '/tempban [playerid] [years] [weeks] [days] [hours]' then you'd have to do something like this:
pawn Code:
Last edited by __; 14/05/2011 at 09:23 AM. |
|
|
|
|
|
#7 |
|
Huge Clucker
![]() ![]() ![]() Join Date: Sep 2009
Location: Ravenna, Italy
Posts: 195
Reputation: 10
|
Wow, I didn't knew that! Thank you very much, now I can create some temporary systems!
|
|
|
|
|
|
#8 |
|
Huge Clucker
![]() ![]() ![]() Join Date: Nov 2010
Location: London, UK
Posts: 243
Reputation: 17
|
Released a filterscript using Unix timestamps for temporary banning: http://forum.sa-mp.com/showthread.ph...22#post1205522
|
|
|
|
|
|
#9 |
|
Gangsta
![]() ![]() ![]() ![]() Join Date: Jul 2010
Location: New Zealand
Posts: 748
Reputation: 20
|
Thank you so much for the tut. Converted most of my script over to using unix. Hopefully alot more people will start using this!
|
|
|
|
|
|
#10 |
|
High-roller
![]() ![]() ![]() ![]() ![]() Join Date: Dec 2010
Posts: 2,041
Reputation: 493
|
Well done, Unix timestamps FTW!
|
|
|
|
![]() |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Unix Time | Czeladnik | Help Archive | 16 | 20/04/2011 08:09 AM |
| ..::Unix-RolePlay::.. | darreugne | Français/French | 1 | 02/02/2011 10:25 PM |