在Javascript中将一个字符串转换为单个日期

3

我有一个输入文本,其中包含日期和时间的组合,并显示如下:

04/01/2015 8:48PM 

如何在JavaScript中使用函数 new Date() 将此字符串转换为日期?没有输出显示。
这是我到目前为止尝试过的,我只能转换日期而不是时间。HTML
 <form name="frm1" >


      <h3>Check in Date:</h3>
      <input type="text" value="" class="datetimepicker_mask" name="dtp1" /><br><br>

      <h3>Check out Date:</h3>
      <input type="text" value="" class="datetimepicker_mask" name="dtp2" /><br><br>

      <input type="button" onclick="computeDate()" value="Compute Difference" /> 

      <br><b>No of days: </b>
      <span id="date_difference"></span>

     </form>

JAVSCRIPT

function computeDate() {

        var dateTime1 = document.frm1.dtp1.value;
        var dateTime2 = document.frm1.dtp2.value;


        var startDate = new Date(dateTime1);
        var endDate = new Date(dateTime2);




        var timeDiff = Math.abs(endDate.getTime() - startDate.getTime());

        if (timeDiff == 0) {
            timeDiff = 1;
        }

        var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 

        var total = parseFloat(diffDays) * parseFloat(roomRate);

        document.getElementById("date_difference").innerHTML = diffDays;
        document.getElementById("date_difference").style.visibility = "visible";

    }

你需要把这些数据转换成哪种格式? - Saty
日期是DD/MM/YYYY还是MM/DD/YYYY格式? - George
http://jsfiddle.net/5gbz1L1d/ - adeneo
https://dev59.com/rWQo5IYBdhLWcg3wBLjy 回答了这个问题。 - Moishe Lipsker
3个回答

1
如果日期格式始终相同,创建一个方便的函数将日期转换为Date对象。
function convert(date) {
    var dateArr = date.split(/[\s\/\:]/);

    if (dateArr[4].toLowerCase().indexOf('pm') != -1) 
        dateArr[3] = (+dateArr[3]) + 12;

    dateArr[4] = dateArr[4].replace(/\D/g,'');
    dateArr[0]--;

    return new Date(dateArr[2], dateArr[0], dateArr[1], dateArr[3], dateArr[4]);
}

JSFIDDLE


0

在解析日期字符串后,您可以创建日期对象

var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

您可以按照以下方式使用parseDate函数

var testDate = "04/01/2015 8:48PM";
console.log(parseDate(testDate));

function parseDate(dateStr){
    var dateTime = dateStr.split(/\/| |:|(?=[PA])/);

    for(var i=0; i<5; i++){
        dateTime[i] = parseInt(dateTime[i]);
    }
    if(dateTime[5] == "PM"){
        dateTime[3] += 12;
    }

    return new Date(dateTime[2], dateTime[1], dateTime[0], dateTime[3], dateTime[4]);
}

在JSFiddle上试一试


0

这里有一个解决方案,既可以解决这个问题,又可以使开发更容易。这个建议需要一个额外的库来解决你在这里遇到的时间等问题,但当你处理JavaScript日期时,你可能会发现它很有用。看起来你已经在编写手动日期函数了。使用强大的库来抽象这些相同问题的解决方案,这些问题一次又一次地出现。使用date.js,这就变得非常简单了。

Date.parse('04/01/2015 8:48PM ')

JSFiddle 示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接