अद्यतन: ऐसा लगता है कि इस कार्यक्षमता एक Template Toolkit Plugin में कार्यान्वित किया जाता। मैं यहां संदर्भ के लिए अपना बाकी उत्तर छोड़ रहा हूं, लेकिन Template::Plugin::DtFormatter देखने के लिए सबसे अच्छी जगह हो सकती है।
उस मॉड्यूल के स्रोत कोड को देखते हुए, मुझे DateTime::Format::Natural पर ले जाया गया जो आप चाहते हैं उससे संबंधित लगता है।
पिछला उत्तर:Date::Calc में
देखो आप डेल्टा Delta_DHMS
का उपयोग कर देते हैं। आप उन डेल्टा का उपयोग करने में सक्षम होना चाहिए ताकि यह चुनने के लिए कि आप तिथि को कैसे वाक्यांश पर जा रहे हैं।
यहां एक बहुत ही प्रारंभिक प्रारंभिक बिंदु है। यह छोटी है लेकिन मूल विचार को दर्शाता है। स्वाद के लिए तर्क जोड़ें।
#!/usr/bin/perl
use strict;
use warnings;
use Date::Calc qw(:all);
use Lingua::EN::Inflect qw(NO);
my @dates = (
[ 2009, 7, 6 ],
[ 2009, 7, 30 ],
[ 2009, 7, 9 ],
[ 2009, 7, 9, 12, 32 ],
[ 2009, 7, 12, 5, 43 ],
[ 2009, 7, 3, 5, 14 ],
[ 2010, 8, 9 ],
[ 2012, 8, 9 ],
[ 2013, 8, 9 ],
);
for my $date (@dates) {
print "@$date: ", relative_when($date), "\n";
}
sub relative_when {
my ($year, $month, $day, $hour, $min, $sec) = @{ $_[0] };
my ($Dyear, $Dmon, $Dday, $Dhr, $Dmin, $Dsec) = Delta_YMDHMS(
Today_and_Now(),
$year, $month, $day, $hour || 0, $min || 0, $sec || 0
);
return NO('year', $Dyear) if $Dyear > 0;
return NO('month', $Dmon) if $Dmon > 0;
return NO('week', int($Dday/7) if $Dday > 6;
return NO('day', $Dday) if $Dday > 1;
return 'tomorrow' if $Dday == 1;
return 'today' if $Dday == 0;
return "";
}
__END__
आउटपुट: ट्विटर फैन विकी पर Relative Time Scripts पर
C:\Temp> dfg
2009 7 6:
2009 7 30: 2 weeks
2009 7 9: today
2009 7 9 12 32: today
2009 7 12 5 43: 2 days
2009 7 3 5 14:
2010 8 9: 1 year
2012 8 9: 3 years
2013 8 9: 4 years
हू? डाउनवोट क्यों? –
मुझे पता है, है ना? लोग इस साइट पर कुछ भी कम कर देंगे। मतलब होने की जरूरत नहीं है! – mcandre