2

我分别有两个日期变量,如下所示

startDate是一个Date具有值的实例Tue Jul 17 2012 00:00:00 GMT+0530 (IST)

startTime是一个String与价值"11:30 AM"

现在我需要的是加入上述日期和时间,作为Date.

startDateTime= Tue Jul 17 2012 11:30:00 GMT+0530 (IST)

我试过了

new Date(startDate + " " + startDate)但输出invalid date

还尝试了这篇文章中显示的方式。但仍然无法正常工作。

4

3 回答 3

4

您可以轻松解析startTime它是否采用明确定义的格式,然后使用setHoursand setMinutesLive example | 资源

var startDateTime;
var parts = /^(\d+):(\d+) (AM|PM)$/.exec(startTime);
if (parts) {
    hours = parseInt(parts[1], 10);
    minutes = parseInt(parts[2], 10);
    if (parts[3] === "PM" && hours !== 12) {
        hours += 12;
    }
    else if (parts[3] === "AM" && hours === 12) {
        hours = 0;
    }
    if (!isNaN(hours) && !isNaN(minutes)) {
        startDateTime = new Date(startDate.getTime());
        startDateTime.setHours(hours);
        startDateTime.setMinutes(minutes);
    }
}

...或类似的规定。

请注意,关键是您所说的事实startDate是一个Date实例。以上假设我们在 JavaScript 环境的时区内工作,而不是跨区域工作。如果您从日期字符串开始,并且该字符串指定了 JavaScript 环境时区以外的时区,然后您将其转换为Datevia new Date("Tues Jul...."),那么您必须确保调整结果Date以使用本地时间环境或 UTC;如果您将其调整为 UTC,您将使用setUTCHoursand setUTCSecondsabove 而不是setHoursand setSeconds。同样,如果您的起点是日期字符串,并且该字符串指定不同的时区,这只是一个问题从上面的代码运行的时区。

于 2012-07-20T10:11:13.640 回答
2

你可以这样做:

var theDate = new Date("Tue Jul 17 2012 00:00:00 GMT+0530 (IST)");
var theTime = "11:30 AM";
var hours = theTime .substr(0,2);
var minutes = theTime .substr(3,2);
var amOrPm = theTime .substr(6,2);
if (hours < 12 && "PM" == amOrPm) {
    hours = +hours + 12;
}
theDate.setHours(hours);
theDate.setMinutes(minutes);
于 2012-07-20T10:28:57.920 回答
0

尝试

new Date(startDate.toDateString() + " " + startTime)

这会将Date对象中的日期字符串与时间字符串结合起来,并且应该为您提供一个有效的日期。请注意,这会忽略您最初使用的时区,您可能需要" GMT+0530"再次添加。

但是,由于您的日期字符串已经存在时区偏差(2012 年 7 月 16 日,UTC 时间 20:30:00),最好将它们加在一起,例如new Date(+startDate + milliseconds)

var startDate = new Date("Tue Jul 17 2012 00:00:00 GMT+0530");
var startTime = "11:30 AM";
return new Date(+startDate + +new Date("1 1 1970 "+startTime))
于 2012-07-20T10:11:15.307 回答