User:Barthax/DateTime Template Function
From Meta, a Wikimedia project coordination wiki
| DateTime Template Function | |
|---|---|
| Type: | Parser extension |
| Version | |
| Version: | 1.0 |
| Maturity: | Beta |
| MediaWiki: | 1.5.6 |
| Last Updated: | 30-03-2006 |
| Description | |
| Allow native access to the strftime PHP function as part of the wiki page. | |
| MediaWiki extensions | |
Created a new function template: {{DATETIME:<date>[|<format>]}} taking a format from the PHP strftime date->string conversion routine.
Contents |
[edit] Usage
- Template function: {{datetime:
- Date/time to be converted: 1/1/1980 11:23
- Optional Parameter: |%D %T
- Close template: }}
Example: {{datetime:1/1/1980 11:23pm|%D %T}} would generate 01/01/80 23:23:00.
[edit] File modifications
Based on v1.5.6.
[edit] includes/DefaultSettings.php
At the end:
$wgDateFormatDefault = "%D %T";
[edit] language/Languages.php
Add another magic word to the end of the array:
MAG_DATETIME => array( 0, 'DATETIME:' ),
[edit] includes/MagicWord.php
Add a new definition for the generated MAG_DATETIME to the end of the definitions of MAG_*:
define('MAG_DATETIME', 44);
Obviously increase the numeric to be one more than it's predecesor.
[edit] includes/Parser.php
The guts of the mod, all done in the braceSubstitution function.
Add the default date format to the globals:
global $wgLinkCache, $wgContLang;
becomes:
global $wgLinkCache, $wgContLang, $wgDateFormatDefault;
Further down, add the following after the check for GRAMMAR:
# DATETIME
# Format a date/time parameter via http://php.net/manual/en/func
tion.strftime.php format
if ( !$found ) {
# Check for DATETIME: (namespace expansion)
$mwDate = MagicWord::get( MAG_DATETIME );
if ( $mwDate->matchStartAndRemove( $part1 ) ) {
$dateParsed = strtotime($part1);
if ($dateParsed == FALSE )
{
$text = $linestart . "Invalid Date/Time: " . $part1;
$found = true;
} else
{
if ( $argc == 0 ) {
$text = $linestart . $debug . strftime( $wgDateFormatDefault , $dateParsed);
} else
{
$text = $linestart . $debug . strftime( $args[0] , $dateParsed);
}
$found = true;
}
}
}
[edit] Conclusion
This may not look especially useful at first but was created for a template being used on a private wiki which requires the same date being expressed in multiple locations but in different formats. Hence a template such as the following can be created (the original is rather more extensive):
Birthdate: {{datetime:{{{birthdate}}}|%D %T}}
[[Category:{{datetime:{{{birthdate}}}|%p}}]]
[[Category:{{datetime:{{{birthdate}}}|%Y}}]]
[[Category:{{datetime:{{{birthdate}}}|%B}}]]