इस तारीख तक कब तक?


11

यह विचार यह है: एक तर्क के रूप में आपूर्ति की गई तारीख तक अब / आज की तारीख (जिस समय समारोह कहा जाता है) से समय की लंबाई को मुद्रित करने के लिए एक फ़ंक्शन लिखें।

मान्यताओं:

  • इनपुट की तारीख भविष्य में हमेशा कल या बाद में होगी।
  • भविष्य में इनपुट तिथि कभी भी 10 वर्ष से अधिक नहीं होगी।

नियम:

  • आउटपुट इस प्रारूप में होना चाहिए: "[z year (s)], [x महीना (s)], y दिन (s) तक -Input दिनांक-"
  • आउटपुट टाइम फ्रेम (दिन / महीना / वर्ष) को सही ढंग से प्लुरल किया जाना चाहिए। यानी 1 month, नहीं1 months
  • इनपुट जो भी आपको पसंद हो प्रारूप में हो सकता है (3/15/12 - 15 मार्च, 2012 - 2012.03.15)।

उदाहरण: मान लिया गया कि कार्यक्रम 15 मार्च 2012 को चलाया गया है:

  • की इनपुट तिथि 3/20/12=5 days until 3/20/12
  • इनपुट की तारीख नहीं4/16/12 =1 month, 1 days until 3/20/12
  • की इनपुट तिथि 2012.04.20=1 month, 5 days until 2012.04.20
  • इनपुट की तारीख नहीं2012.04.20 =36 days until 2012.04.20
  • की इनपुट तिथि 10/31/17=5 years, 7 months, 16 days until 10/31/17
  • की इनपुट तिथि 3/15/13=1 year until 3/15/13

यह कोड गोल्फ है, इसलिए सबसे कम लंबाई कोड जीतता है।

मुझे लगता है कि एक समय सीमा होने के लिए, मैं एक उत्तर का चयन करूंगा:

२३ मार्च २०१२!

(यह मेरा पहला CG प्रश्न है, इसलिए मुझे अपनी ओर से कोई भी प्रश्न त्रुटि सुधारने में खुशी होगी!)


3
वोल्फ्राम | अल्फा 10 वर्ण:: now until <input time> पी
ग्रिफ़िन

3
@ ग्रीफिन 4 चरस:now-<input time>
PhiNotPi

1
@PhiNotPi अच्छा खेला, अच्छा सर।
ग्रिफिन

2
क्या "1 दिन 3/16/12 तक" कहना ठीक है?
MrZander

1
उत्तर में लीप यारों के साथ कैसे काम करें? 10 साल में फिर 2 दिन की त्रुटि होगी। महीना कब तक है?
होलेथ

जवाबों:


3

आर, 99 वर्ण

मुझे पता है कि यह एक तरह का धोखा है, लेकिन आर इसके पैकेज के बारे में है और इस तरह के कार्यों के लिए लुब्रिडेट इतना सुविधाजनक है!

f=function(x){library(lubridate);cat(show(as.period(interval(mdy("3/15/2012"),mdy(x)))),"until",x)}

उपयोग:

f("10/31/2017")
[1] 5 years, 7 months and 16 days 
5 years, 7 months and 16 days  until 10/31/2017

1

PHP, 315 अक्षर

function p($z)
{
list($d,$m,$y)=explode("/",$z);
$d=$d-date("d");
$n=$m-1;
$m=$m-date("m")-($d<0);
$d=$d+($d<0)*($n>7^$n&1)+27+($n-2?3:($y%4?1:($y%100?2:($y%400?1:2))));
$y=$y-date("Y")-($m<0);
$s="s ";
echo ($y?$y." year".$s[$y<2]:"")." ".($m?$m." month".$s[$m<2]:"")." ".($d?$d." day".$s[$d<2]:"")." until ".$z;
}

उपयोग:

p("11/03/2006");

एक dd/mm/yyyyप्रारूप में तारीखें लेता है । मैंने ग्रिफिन की महीने की लंबाई गणना ( फिर से ) का उपयोग किया है, हालांकि पूर्वता को ठीक से काम करने के लिए मुझे इसमें अतिरिक्त कोष्ठक चिपकाने पड़े। मैंने इसे पढ़ने के लिए थोड़ा आसान बनाने के लिए कुछ लाइन-ब्रेक भी छोड़ दिए हैं।


1

रूबी (213)

किसी भी प्रारूप में तारीखों को Date.parseस्वीकार करता है। बस के साथ की कोशिश कीyyyy-mm-dd

def u s
t=Date.today
f=Date.parse s
[[0,'year'],[0,'month'],[0,'day']].map{|c,n| while t<f 
c+=1
t=t.send"next_#{n}"
end
c,t=c-1,t.send("prev_#{n}")if t>f
[c,n+(c>1??s:'')]*' 'if c>0}.compact*', '+' until '+s
end

सप्ताह पाने के लिए, जोड़ें:

['prev_','next_'].each{|n|Date.send(:define_method,n+'week'){send n+'day',7}}

और [0,'week'],(महीने और दिन के बीच)। दिन तो हमेशा रहेंगे< 7


जो रूबी संस्करण आप उपयोग कर रहे हैं .... मैंने ruby1.9.2p0 पर आपके कोड को चलाने की कोशिश की, लेकिन यह मुझे त्रुटि देता है uninitialized constant Object::Date (NameError)... मुझे लगता है कि आप रेल Dateवर्ग का उपयोग कर रहे हैं
रोहित

@Rohit 1.9.3, रेल के सामान का उपयोग नहीं करना। दिनांक rdoc
jsvnm

मैंने पहले डॉक देखा था .. लेकिन मुझे जो त्रुटि मिल रही थी, उस पर उलझन थी ... मैं अभी भी यह पता लगाने में असमर्थ हूं कि मुझे यह त्रुटि क्यों मिल रही है। मैं खिड़कियों पर हूँ 7 64-बिट, रूबी 192p0
रोहित

@rohit 193 के साथ प्रयास करें?
jsvnm

1

VBA: 766 631 शुल्क

स्ट्रिंग निर्माण को छोटा करने में मदद के लिए मेलमोकब का धन्यवाद और IIf

Function k(i)
e=" month"
g="s"
n=Now()
r=Month(n)
s=Month(i)
t=DateSerial(Year(i),s,1)
u=DateSerial(Year(i),s-1,1)
v=Day(n)
w=Day(i)
x=DateSerial(Year(n),r,1)
d=t-u-v+w
For y=0 To 10
If Year(DateAdd("yyyy",-1*y,i))=Year(n) Then Exit For
Next
y=IIf(s=1,y-1,y)
z=s-r
z=IIf(z<0,z+12,z)
For m=0 To z
If Month(DateAdd("m",-1*m,i))=r Then Exit For
Next
d=IIf(v<=w,w-v,d)
m=IIf(v>w,m-1,m)
If y Then a=y & " year" & Left(g,y-1)
a=IIf((m Or d) And y,a & ",",a)
If m Then b=IIf(d,m & e & Left(g,m-1) & ",",m & e & Left(g,m-1))
If d Then c=IIf(d>1,d & " days",d & " day")
k=Trim(Trim(a & " " & b) & " " & c) & " until " & i & "."
End Function

मुझे पता है कि VBAनिश्चित रूप से खुद को गोल्फ के साथ-साथ कुछ अन्य भाषाओं में कोड करने के लिए उधार नहीं देता है, लेकिन यह वह है जो मैं अच्छा हूं (विशेषज्ञ नहीं)। :-)

यह मेरे लिए एक मजेदार व्यायाम रहा है!


1
यह पूरी तरह से VBA की गलती नहीं है, आपके कोड में तर्क को संयोजित करने के कुछ अच्छे तरीके हैं :) उदाहरण के लिए, If y > 0 Then a = y & " year,":If y > 1 Then a = y & " years,"साथ में जोड़ा जा सकता हैa = y & " year" & Left("s", y - 1) & ","
mellamokb

@ ममलमोकब बहुत अच्छा है। मैं उस पर एक नज़र डालूँगा और पुनर्स्थापना करूँगा!
गफ्फी

मैं कुछ परीक्षण मामलों, अर्थात् साथ एक समस्या थी 1 year, 1 month, 1 day। मैंने उत्तर में इसे सही किया है। यह वास्तव में छोटे कोड के लिए बना है!
गफ्फी

और अद्यतन पोस्ट करने के बाद, मुझे लगता है कि मैं बदल सकते हैं If v < w Then d = w - v:If v = w Then d = 0करने के लिए If v <= w Then d = w - vअतिरिक्त 20 वर्णों का एक बचत के लिए। यदि मेरे पास पोस्ट करने के लिए अधिक महत्वपूर्ण परिवर्तन है, तो मैं उत्तर को अपडेट करूंगा।
गफ्फी

मुझे लगता है कि मैं सरणियों के साथ यह बेहतर कर सकता हूं ... मैं एक और नज़र
डालूंगा

1

जावास्क्रिप्ट (ईएस 6), 125 बाइट्स

चूँकि पाओलो के जवाब ने बाहरी पुस्तकालय का उपयोग किया है, मैं भी यही करूँगा। Node.js NPM पैकेज और क्षण + के बारे में है + HumanizeDuration इस कार्य के लिए बहुत सुविधाजनक है!

नोड वातावरण

m=require('moment'),f=d=>console.log(require('humanize-duration')(m(d).diff(m()),{units:['y','mo','d'],round:1})+' until '+d)

ब्राउज़र वातावरण

चूंकि पुस्तकालय वैश्विक चर घोषित करते हैं, यह वास्तव में थोड़ा कम (102 बाइट्स) है। यह स्पष्ट नहीं है कि मुझे तीसरे पक्ष के जावास्क्रिप्ट में लोड करने के लिए आवश्यक स्क्रिप्ट टैग शामिल करने की आवश्यकता है, इसलिए मैं नोड को आधिकारिक रूप से गिनूंगा।

f=d=>console.log(humanizeDuration((m=moment)(d).diff(m()),{units:['y','mo','d'],round:1})+' until '+d)

CoffeeScript, भी 125 बाइट्स

f=(d)->console.log require('humanize-duration')((m=require 'moment')(d).diff(m()),{units:['y','mo','d'],round:1})+' until '+d

1

पीएचपी, 151 चार्ट

function p($z){$n=date_create(date('Y-m-d'));$d=date_create($z);$i=date_diff($n,$d);print($i->format('%R%y years, %m months, and %a days until '.$z));}

यह प्लरल्स को याद कर रहा है और सही तरीके से नहीं गिनता है, क्योंकि प्रारूप () महीनों से दिनों को घटाते नहीं हैं ... मेरे पास पीएचपी के साथ भी इसी तरह का समाधान था।
powtac

यह मेरा PHP समाधान है, लेकिन अभी भी पहले से उल्लेखित त्रुटि का अभाव है: echo date_diff(new DateTime(),new DateTime($argv[1]))->format('%yyears, %mmonths, %a days');इसकी 92 चार्ट लंबी, जब कमांड लाइन पर कॉल किया जाता है।
बजकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.