2012-07-05 13 views
12

जावास्क्रिप्ट निश्चित रूप से मेरा सबसे मजबूत बिंदु नहीं है। मैं अब कुछ घंटों के लिए इसका प्रयास कर रहा हूं और ऐसा लगता है कि कहीं भी तारीख स्वरूपण के साथ फंस गया है।जावास्क्रिप्ट का उपयोग कर सप्ताहों को कैसे जोड़ा जाए?

मेरे पास एक ऐसा फॉर्म है जहां उपयोगकर्ता ने दिनांक (डीडी/मिमी/yyyy) चुना है और फिर यह तिथि ली जाएगी और इसमें 2 सप्ताह जोड़े जाएंगे और फिर तारीख को किसी अन्य फॉर्म फ़ील्ड में कॉपी किया जाएगा।

मेरा नवीनतम प्रयास अभी तक एक तिथि भी नहीं जोड़ रहा है, अगर मैं '03/02/2012 'का चयन करता हूं, तो यह सिर्फ एक तिथि फ़ील्ड में दूसरी तारीख को कॉपी कर रहा है, यह' शुक्र मार्च 02 2012 00:00 आउटपुट करता है: 00 जीएमटी +0000 (जीएमटी मानक समय) ', इसलिए यह अमेरिकी प्रारूप के साथ-साथ पूर्ण तिथि में भी outputting। मैं इसे उसी प्रारूप में कैसे डालूं और 2 सप्ताह जोड़ूं?

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    document.frmAccept.acceptLicence.value = date1; 

} 
+0

मुझे पसंद है [कि ans] (http://stackoverflow.com/a/7751977/1509853) – oCcSking

उत्तर

3

आप date1 बताए रहे दिनांक वस्तु जो का प्रतिनिधित्व करता है स्ट्रिंग आप इसे पारित किया जाना है। acceptLicense मान में आप जो देख रहे हैं वह toString() दिनांक वस्तु का प्रतिनिधित्व है (इसे देखने के लिए alert(date1.toString()) आज़माएं)।

आउटपुट के रूप में आउटपुट करने के लिए, आपको स्ट्रिंग कॉन्सटेनेशन और various Date methods का उपयोग करना होगा।

var formattedDate = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 

2 सप्ताह जोड़ने के मामले में, आपको वर्तमान तिथि में 14 दिन जोड़ना चाहिए;

date1.setDate(date.getDate() + 14); 

... यह स्वतः ही महीने वृद्धि आदि

अंत में संभाल लेंगे, आप के साथ खत्म हो जाएगा;

var date1 = new Date(acceptCompletionDate); 
date1.setDate(date1.getDate() + 14); 
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 

N.B जावास्क्रिप्ट में महीने 0 से इंडैक्स (जनवरी = 0, दिसम्बर = 11), इसलिए महीने पर +1 हैं।

संपादित: अपनी टिप्पणी के समाधान के लिए के रूप में के बजाय इस प्रकार है, आप date निर्माण करना चाहिए, के रूप में Date तर्क माना जाता है "एक स्ट्रिंग एक RFC2822 या आईएसओ 8601 दिनांक दर्शाता है।" (see here)।

var segments = acceptCompletionDate.split("/"); 
var date1 = new Date(segments[2], segments[1], segments[0]); 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद, अगर मैं चयन '04/01/2012 '(dd/mm/yyyy) मैं दूसरे क्षेत्र में प्राप्त मूल्य '15/4/2012 '(डीडी/मिमी/yyyy) है, इसलिए ऐसा लगता है कि दिन के बजाय महीने में 14 जोड़ना, या अधिक पसंद ¢ प्रारूपण अभी भी कहीं गलत है। – JBoom

+0

मुझे लगता है कि इसे 14 दिनों के जोड़े जाने से पहले किसी भी तरह स्वरूपण की आवश्यकता है? चूंकि (date1.getDate() + 14) इसे एमएम/डीडी/yyyy – JBoom

+0

@JBoom के रूप में स्वरूपित माना जाता है: 'दिनांक' तर्क "आरएफसी 2822 या आईएसओ 8601 दिनांक का प्रतिनिधित्व करने वाली स्ट्रिंग" माना जाता है। ([यहां देखें] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse))। दूसरे कन्स्ट्रक्टर का उपयोग करना बेहतर हो सकता है जो वर्ष, महीने, दिन को अलग पैरामीटर के रूप में स्वीकार करता है (मेरा संपादित उत्तर देखें)। – Matt

0

यह वही करना चाहिए जो आप खोज रहे हैं।

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    date1.setDate(date1.getDate() + 14); 
    document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 
} 
42

आप ऐसा कर सकते हैं:

var now = new Date(); 
now.setDate(now.getDate()+14); 
alert(now); 

आप बेला here देख सकते हैं।

विधि documentation in MDN

setDate() के अनुसार स्थानीय समय के अनुसार एक निर्धारित तिथि के लिए महीने के दिन निर्धारित करता है।

+0

@ जैस्पर - क्या आप मुझे एक उदाहरण दे सकते हैं जो विफल रहता है? मैंने अपने जवाब में कोड का एक लिंक दिया है। –

-1

सबकुछ there!

:

date1.toLocaleDateString() 

Thiswill आप ग्राहक सम्मेलन

में एक स्ट्रिंग 2 सप्ताह अधिक (2weeks = 2 * 7 * 24 * 60 * 60 सेकंड) के साथ एक नई तारीख DATE2 बनाने के लिए के रूप में DATE1 वापसी

var date2 = new Date(date1 + 60*60*24*7*2); 
+0

यही है ['toLocaleDateString'] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.6) ** ** करना चाहिए, लेकिन यह सभी ब्राउज़रों में नहीं है (जैसे क्रोम हाल ही के संस्करणों के रूप में, लेकिन वर्तमान संस्करण नहीं, फ़ायरफ़ॉक्स के रूप में, मेरी सिस्टम सेटिंग्स को अनदेखा करता है)। – RobG

0

विशिष्ट dd/mm/yyyy प्रारूप और 14 के साथ वृद्धि दिन को पार्स करने के लिए, आप कुछ हिस्सों को विभाजित करने की तरह कुछ कर सकते हैं, और दिनांक वस्तु को y/m/d के साथ specfically दिए गए हैं। (दिन अभी incrementing) - विभाजक प्रदान करना हमेशा होता है, तो निम्न कार्य करना चाहिए:

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var parts = acceptCompletionDate.split("/"); 
    var date1 = new Date(parts[2], (parts[1] - 1), parseInt(parts[0]) + 14); //month 0 based, day: parse to int and increment 14 (2 weeks) 
    document.frmAccept.acceptLicence.value = date1.toLocaleDateString(); //if the d/m/y format is the local string, otherwise some cusom formatting needs to be done 

} 
0

बस कुछ न्यूनतम संशोधनों टोस्ट का जवाब देने के लिए और आप सटीक प्रारूप आप dd/mm/yyyy के लिए देख रहे हो जाएगा:

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    date1.setDate(date1.getDate() + 14); //This adds the two weeks 

    var day = date1.getDate() 9 10 ? date1.getDate() : '0' + date1.getDate(); 
    var month = date1.getMonth() >= 9 ? date1.getMonth() + 1: '0' + date1.getMonth(); 

    document.frmAccept.acceptLicence.value = day + '/' + month + '/' + date1.getFullYear(); 
} 
संबंधित मुद्दे