面倒なW3C-DTF表記を簡単に入力するためのJavaScriptとプラグインです。
読んで字のごとく、特定の文字列を W3C-DTF フォーマットの日付に置換する JavaScript とNucleusプラグインです。
Nucleus で ins タグの datetime 属性にいつも日付を W3C-DTF フォーマットで書いていたのですが、面倒になったので JavaScript にさせることにしました。
ちなみに、fdate は formatted date の略です。
正規表現でフォーム内の「%%NOW%%」という文字列を検索し、W3C-DTF フォーマットの現在の日付に置換します。
%%NOW%% 以外の文字列を置換する場合や Nucleus 以外でご利用になる場合は適宜変更してください。
var mySysDate = new Date();
myYear = mySysDate.getFullYear();
myMonth = mySysDate.getMonth()+1;
myDate = mySysDate.getDate();
myHour = mySysDate.getHours();
myMin = mySysDate.getMinutes();
mySec = mySysDate.getSeconds();
if(myMonth < 10) { myMonth = "0" + myMonth; }
if(myDate < 10) { myDate = "0" + myDate; }
if(myHour < 10) { myHour = "0" + myHour; }
if(myMin < 10) { myMin = "0" + myMin; }
if(mySec < 10) { mySec = "0" + mySec; }
var fDate = myYear + '-' + myMonth + '-' + myDate + 'T' + myHour + ':' + myMin + ':' + mySec+'+09:00';
var myPattern = new RegExp('%%NOW%%', 'g');
var myTarget = document.forms[0].body.value;
var myResult = myTarget.replace(myPattern, fDate);
document.forms[0].body.value = myResult;
ins要素とかdel要素とかを使っているとW3C-DTFフォーマットの日付を結構使うので、Bookmarkletを作ってみた。
javascript:(function(){var mySysDate = new Date();
myYear = mySysDate.getFullYear();
myMonth = mySysDate.getMonth()+1;
myDate = mySysDate.getDate();
myHour = mySysDate.getHours();
myMin = mySysDate.getMinutes();
mySec = mySysDate.getSeconds();
if(myMonth < 10) { myMonth = '0' + myMonth; }
if(myDate < 10) { myDate = '0' + myDate; }
if(myHour < 10) { myHour = '0' + myHour; }
if(myMin < 10) { myMin = '0' + myMin; }
if(mySec < 10){ mySec = '0' + mySec; }
var fDate = myYear + '-' + myMonth + '-' + myDate + 'T' + myHour + ':' + myMin + ':' + mySec+'+09:00';
var x=prompt('',fDate);
})();
動作例 (JavaScript の実行環境が必要です)
使いづらかったので、Nucleus プラグインにしてみた。このプラグインの最新版はtrunkから入手可能である。
管理画面では置換する文字列を変更することができる (デフォルトは「%%NOW%%」)。
<?php
class NP_FDate extends NucleusPlugin {
function getName() { // name of plugin
return 'FDate';
}
function getAuthor() { // author of plugin
return 'ak';
}
function getURL() { // an URL to the plugin website
return 'http://micelle.org/trash/fdate/';
}
function getVersion() { // version of the plugin
return '0.1';
}
// a description to be shown on the installed plugins listing
function getDescription() {
return 'convert particular texts to W3C-DTF format';
}
function supportsFeature($what) {
switch($what){
case 'SqlTablePrefix':
return 1;
default:
return 0;
}
}
function getEventList() { return array('PreAddItem', 'PreUpdateItem'); }
function install() {
$this->createOption("replace", "text to change to W3C-DTF", "text", "%%NOW%%");
}
function event_PreAddItem(&$data) {
if($this->getOption('replace')) {
$data['body'] = $this->fdate($data['body']);
if(trim($data['more'])) {
$data['more'] = $this->fdate($data['more']);
}
}
return;
}
function event_PreUpdateItem(&$data) {
if($this->getOption('replace')) {
$data['body'] = $this->fdate($data['body']);
if(trim($data['more'])) {
$data['more'] = $this->fdate($data['more']);
}
}
return;
}
function fdate($str) {
$fdate = date("Y-m-d\TH:i:s");
$diff = date("O");
$diff = substr($diff, 0, 3) . ':' . substr($diff, 3);
$fdate .= $diff;
$str = str_replace($this->getOption('replace'), $fdate, $str);
return $str;
}
}
?>