#21653 closed enhancement (fixed)
Introduce current_date()
Reported by: | johnbillion | Owned by: | nacin |
---|---|---|---|
Milestone: | 3.9 | Priority: | low |
Severity: | normal | Version: | |
Component: | Date/Time | Keywords: | has-patch commit |
Focuses: | Cc: |
Description
WordPress comes with a function called current_time()
which returns the current time according to the timezone chosen on the General Settings screen. It's used when populating the post date, among other things.
It would be nice to have a date equivalent of this function for outputting the current date according to the timezone setting. Currently if you want to output the current date you need to do this:
echo date( 'd/m/Y', current_time( 'timestamp' ) );
I'd like to be able to use this instead:
echo current_date( 'd/m/Y' );
Note that just using date()
doesn't give the desired effect as WordPress sets the default timezone (as used by date()
) to UTC, not to the timezone chosen on the settings screen.
Attachments (2)
Change History (14)
#2
@
12 years ago
- Cc xoodrew@… added
+1 for 21653.patch. I've been using a very similar wrapper for current_time()
because of project recently where there was a ton of date-sensitive functionality.
#3
follow-up:
↓ 4
@
12 years ago
- Cc danielbachhuber added
- Component changed from General to Date/Time
Rather than introduce a new function which accepts slightly different params, why not add PHP date format to current_time()
?
Usage:
current_time( 'Y-m-d' );
How it'd work:
function current_time( $type, $gmt = 0 ) { switch ( $type ) { case 'mysql': return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) ); break; case 'timestamp': return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); break; default: return ( $gmt ) ? date( $type ) : date( $type, time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ); break; } }
Although the naming deviates from PHP, I believe this approach is superior for a couple of reasons:
- Less code.
- Doesn't create two functions with slightly different use.
Patch is attached.
#4
in reply to:
↑ 3
@
12 years ago
Replying to danielbachhuber:
Rather than introduce a new function which accepts slightly different params, why not add PHP date format to
current_time()
?
+1. 21653.2.patch looks good.
#5
@
12 years ago
Oh hang on, my first patch also introduces current_date_i18n()
which outputs localised date formats. We'd need an equivalent current_time_i18n()
.
This ticket was mentioned in IRC in #wordpress-dev by danielbachhuber. View the logs.
11 years ago
#7
@
11 years ago
- Keywords commit added
I like danielbachhuber's approach.
Without current_date(), current_date_i18n() seems out of place. And, date_i18n() with only one argument already operates on the current, local timestamp (it has an optional gmt flag as well), so it's not needed.
I doubt current_time() has unit tests, but it'd be nice.
#8
@
11 years ago
- Milestone changed from Awaiting Review to 3.9
I doubt current_time() has unit tests, but it'd be nice.
How would you recommend mocking time()
such that it's unit testable?
#9
@
11 years ago
Yeah, this is actually not too easy to test at all. Even something like asserting 'Y' will need timezone offset calculations so it doesn't fail on December 31/January 1 every year.
#10
@
11 years ago
- Owner set to nacin
- Resolution set to fixed
- Status changed from new to closed
In 27259:
#11
@
9 years ago
- Summary changed from Introduce current_date() to Fix current_date()
'timestamp' functionality appears to be wrong.
current_time('timestamp') should always return the timestamp according to UTC. That's because a timestamp is defined as the number of seconds that have elapsed since 00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970.
Therefore, producing this offset by x number of hours for local time is incorrect logic. If it's 1,452,598,896 seconds since the start of Unix time, this does not change depending on timezone - the number of seconds is the same (but may instead be displayed differently depending on timezone).
#12
@
9 years ago
- Summary changed from Fix current_date() to Introduce current_date()
@turn-on-social The current_time()
function is explicitly designed to return a timestamp with the current site's timezone offset applied. Its return value is used as the $timestamp
argument in functions such as date()
because WordPress sets the server's timezone to UTC.
If you need the current UTC timestampe, use time()
.
If you think there's a real bug here please open a new ticket with these details, as this ticket was closed on a completed milestone. Thanks!
Patch which introduces
current_date()
andcurrent_date_i18n()
.