簡體   English   中英

javascript日期和時間加入

[英]javascript date & time join

我分別有兩個日期變量,如下所示

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

還嘗試了此帖子中顯示的方式。 但仍然無法正常工作。

如果startTime采用明確定義的格式,則可以輕松地對其進行解析,然后使用setHourssetMinutes實時示例 | 資源

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);
    }
}

...或類似的規定。

請注意,關鍵在於您已經說過startDateDate實例。 以上假設我們正在JavaScript環境的時區內工作,而不是跨區域。 如果您改用日期字符串開頭,並且該字符串指定了JavaScript環境時區以外的時區,然后通過new Date("Tues Jul....")將其轉換為Date ,則您需要確保將結果Date調整為使用環境的本地時間或UTC; 如果你調整它是UTC,你會使用setUTCHourssetUTCSeconds上面,而不是setHourssetSeconds 同樣,這僅是一個問題,如果您的起點是日期字符串 ,並且該字符串指定的時區上面的代碼在其中運行的時區不同

你可以這樣做:

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);

嘗試

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

這會將Date對象中的日期字符串與時間字符串結合在一起,並應給您一個有效的日期。 請注意,這會忽略您最初使用的時區 ,您可能需要再次添加" GMT+0530"

但是,由於您的日期字符串已經是時區偏移的(Jul 16 2012,20:30:00 UTC),所以最好將它們添加在一起,例如,像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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM