2011-11-30 4 views
16

वीबीए में Date फ़ंक्शन के लिए अंतर्निहित पूर्णांक प्राप्त करने का कोई तरीका है? मैं एक्सेल द्वारा संग्रहीत पूर्णांक का जिक्र कर रहा हूं ताकि दिनों की संख्या में स्मृति में तिथियों का वर्णन किया जा सके (जब समय शामिल होता है तो यह एक फ्लोट हो सकता है तो मुझे लगता है)। हालांकि मैं केवल पूर्णांक भाग में रूचि रखता हूं। क्या इसके लिए सिर्फ एक और काम है?वीबीए दिनांक पूर्णांक

उदाहरण के लिए, आज के लिए() मैं वापस 40,877 प्राप्त करने में सक्षम होना चाहते हैं ..

तुम लोगों को धन्यवाद;)

उत्तर

24

दिनांक वीबी (ए) में एक पूर्णांक, यह एक डबल है नहीं है।

आप इसे CDbl() पर पास करके दिनांक का मूल्य प्राप्त कर सकते हैं।

CDbl(Now())  ' 40877.8052662037 

पूर्णांक हिस्सा पाने के लिए, का उपयोग

Int(CDbl(Now())) ' 40877 

जो कोई दशमलव स्थानों (अर्थात क्या Floor() अन्य भाषाओं में करना होगा) के साथ एक लांग डबल लौट आते हैं।

CLng() या Round() का उपयोग गोल करने के परिणामस्वरूप होगा, जो 12:00 बजे के बाद बुलाए जाने पर "भविष्य में दिन" वापस कर देगा, इसलिए ऐसा न करें।

+0

इंट (सीडीबीएल (अब())) लंबे समय तक वापस नहीं आता है, यह एक डबल देता है। डबल का मान सिर्फ एक पूर्णांक का प्रतिनिधित्व करने के लिए होता है, लेकिन इसका डेटा प्रकार अभी भी दोगुना है। – phoog

+0

@phoog: 'TypeName (VarType (Int (CDbl (Now()))) = =" लंबे समय "मेरे सिस्टम – Tomalak

+0

@ टॉमलेक निश्चित रूप से, क्योंकि 'VarType (Int (CDbl (Now()))' रिटर्न 5, जो 'vbDouble' का मान है, लेकिन यह स्वयं 'लांग' है। 'टाइपनाम (Int (सीडीबीएल (अब())) का प्रयास करें)। – phoog

9

बस CLng(Date) का उपयोग करें।

ध्यान दें कि आप आज की तारीख के लिए मूल्य के रूप में इस के लिए Long नहीं Integer उपयोग करने की आवश्यकता> 32767

+0

वास्तव में मैंने लांग/इंटीजर मुद्दे के बारे में नहीं सोचा था! धन्यवाद ! – Jerome

+2

सीएलएनजी अगले दिन तक दोपहर के मूल्यों के दौर में होगा। – phoog

+0

@phoog। मैंने 'दिनांक' का उपयोग नहीं किया है 'अब'। 'तिथि' में कोई समय घटक नहीं है, इसलिए' CLNG' ठीक और सुरक्षित है। पाठ्यक्रम के –

1
Public SUB test() 
    Dim mdate As Date 
    mdate = now() 
    MsgBox (Round(CDbl(mdate), 0)) 
End SUB 
0

आप आज की तरह mdate तरह दिनांक स्ट्रिंग और अब() के लिए bellow कोड उदाहरण का उपयोग कर सकते हैं, आप भी सम्मान दोनों की तारीख के बीच उम्र बढ़ने

Public Sub test(mdate As String) 
    Dim toDay As String 
    mdate = Round(CDbl(CDate(mdate)), 0) 
    toDay = Round(CDbl(Now()), 0) 
    Dim Aging as String 
    Aging = toDay - mdate 
    MsgBox ("So aging is -" & Aging & vbCr & "from the date - " & _ 
    Format(mdate, "dd-mm-yyyy")) & " to " & Format(toDay, "dd-mm-yyyy")) 
End Sub 

नायब तरह की गणना कर सकते हैं: मान्य दिनांक में परिवर्तित दिनांक स्ट्रिंग के लिए CDate प्रयुक्त

मैं इसे 2007 में उपयोग कर रहा हूं :)