2013-05-05 8 views
9

कृपया नीचे दिए गए कोड को देखें;जावास्क्रिप्ट सेट टाइम स्ट्रिंग डेट ऑब्जेक्ट

var d = new Date(); 
var s = "01.00 AM"; 
d.setTime(s); 

मैं जानता हूँ कि इस कोड गलत है। कृपया मुझे समय निर्धारित करने का सही तरीका दें। मेरे हाथ में स्ट्रिंग प्रारूप में 12 घंटे का समय है।

समय अलग-अलग होगा। पता नहीं हो सकता कि पहले समय क्या होगा। यह 12 घंटे का समय भी है। तो यह हो जाएगा AM या PM

उत्तर

16

आप एक regex के साथ समय पार्स कर सकते हैं, और उसके अनुसार घंटे और मिनट सेट:

http://jsfiddle.net/54VkC/1/

var d = new Date(), 
    s = "01.25 PM", 
    parts = s.match(/(\d+)\.(\d+) (\w+)/), 
    hours = /am/i.test(parts[3]) ? parseInt(parts[1], 10) : parseInt(parts[1], 10) + 12, 
    minutes = parseInt(parts[2], 10); 

d.setHours(hours); 
d.setMinutes(minutes); 

alert(d); 

संपादित करें 1: के रूप में जेसन डेविस ने बताया, मूल कोड एएम या पीएम के लिए 12.XX के लिए काम नहीं करेगा, जो एक निरीक्षण था क्योंकि मैंने कभी 12 घंटे के प्रारूप का उपयोग नहीं किया था, सोच रहा था कि यह 00.00 बजे शुरू हुआ था जो गलत था।

को सही कोड है जो इन मामलों को संभालती है यहाँ देखा जा सकता:

http://jsfiddle.net/54VkC/93/

var test, parts, hours, minutes, date, 
 
    d = (new Date()).getTime(), 
 
    tests = ['01.25 PM', '11.35 PM', '12.45 PM', '01.25 AM', '11.35 AM', '12.45 AM'], 
 
    i = tests.length, 
 
    timeReg = /(\d+)\.(\d+) (\w+)/; 
 

 
for(; i-- > 0;) { 
 
    test = tests[i]; 
 
    
 
    parts = test.match(timeReg); 
 
    
 
    hours = /am/i.test(parts[3]) ? 
 
     function(am) {return am < 12 ? am : 0}(parseInt(parts[1], 10)) : 
 
     function(pm) {return pm < 12 ? pm + 12 : 12}(parseInt(parts[1], 10)); 
 
    
 
    minutes = parseInt(parts[2], 10); 
 
    
 
    date = new Date(d); 
 
    
 
    date.setHours(hours); 
 
    date.setMinutes(minutes); 
 
    
 
    console.log(test + ' => ' + date); 
 
}

+0

समय 12.00 PM और 12:59 यह अभी भी समय है, जो समय 12 में आता है करने के लिए 12 घंटे कहते बीच है, तो चाहते हैं। ** AM – jaisonDavis

+0

@jaisonDavis आप सही हैं, इसे पकड़ने के लिए धन्यवाद, मैं वास्तव में 12 घंटे के प्रारूप का उपयोग नहीं करता हूं।मैंने मूल उत्तर में एक जोड़ा है, जो इन मामलों को संभालता है। और मुझे याद रखना होगा 12.XX जब मैं भविष्य में 12-घंटे के प्रारूप के साथ काम करता हूं :-) – thebreiflabb

+0

यह वास्तव में मेरी मदद करता है, – Paulj

1
function getCurrentDate() { 
    var lDate = new Date(); 
    var lDay = lDate.getDate(); 
    var lMonth = lDate.getMonth() + 1; 
    var lYear = lDate.getFullYear(); 

    if (lDay < 10) { 
     lDay = '0' + lDay 
    } 

    if (lMonth < 10) { 
     lMonth = '0' + lMonth 
    } 
    mCurrentDate = lYear + "-" + lMonth + "-" + lDay + "T00:00:00+05:30"; 
} 
7

मैं पार्टी के लिए देर हो रही है, लेकिन मैंने सोचा कि मैं एक साझा करते हैं मज़ेदार जो regex का उपयोग नहीं करता है:

function setDateTime(date, time) { 
    var index = time.indexOf("."); // replace with ":" for differently displayed time. 
    var index2 = time.indexOf(" "); 

    var hours = time.substring(0, index); 
    var minutes = time.substring(index + 1, index2); 

    var mer = time.substring(index2 + 1, time.length); 
    if (mer == "PM"){ 
     hours = hours + 12; 
    } 


    date.setHours(hours); 
    date.setMinutes(minutes); 
    date.setSeconds("00"); 

    return date; 
} 
0

मैंने कुछ उपयोगों को मेरे उपयोग के मामले के अनुरूप @thebreiflabb द्वारा स्वीकृत उत्तर में सुधार के रूप में जोड़ा और सोचा कि मैं साझा करूंगा।

यदि रेगेक्स timeReg = /(\d+)[\.|:](\d+)\s?(\w+)/;, में बदल दिया गया है तो यह कुछ अन्य आम मामलों को संभालेगा।

अर्थात्:

  • घंटे और मिनट
  • की इजाजत दी AM/PM के बीच दशमलव बिंदु के बजाय एक कॉलन का उपयोग कर तुरंत कोई जगह के साथ समय का पालन करने के

भी करने के लिए सेकंड की स्थापना 0 (के बाद से है कि अपने मुख्य उपयोग मामला था)

जिसके परिणामस्वरूप कोड होगा:

var test, parts, hours, minutes, date, 
    d = (new Date()).getTime(), 
    tests = ['01.25 PM', '01:25pm', '1:25 PM', '11.35 PM', '12.45 PM', '01.25 AM', '11.35 AM', '12.45 AM'], 
    i = tests.length, 
    timeReg = /(\d+)[\.|:](\d+)\s?(\w+)/; 

for(; i-- > 0;) { 
    test = tests[i]; 

    parts = test.match(timeReg); 

    hours = /am/i.test(parts[3]) ? 
     function(am) {return am < 12 ? am : 0}(parseInt(parts[1], 10)) : 
     function(pm) {return pm < 12 ? pm + 12 : 12}(parseInt(parts[1], 10)); 

    minutes = parseInt(parts[2], 10); 

    date = new Date(d); 

    date.setHours(hours); 
    date.setMinutes(minutes); 
    date.setSeconds(0); 

    console.log(test + ' => ' + date); 
} 
0

moment.js का उपयोग करना सबसे अच्छा समाधान होगा।

const fullDate = new Date(); 
// fullDate = Tue Dec 12 2017 11:18:30 GMT+0530 (IST) {} 
const time = '01.00 AM'; 
const d = moment(fullDate).format('L'); // d = "12/12/2017" 
const date = moment(d +' '+ time).format(); 
// date = "2017-12-12T01:00:00+05:30" 

आप js तारीख को पल तारीख परिवर्तित

const jsDate = moment(date).toDate(); 
संबंधित मुद्दे