2015-11-20 39 views
3

我想設置一個約會從文本閱讀它的起始日期,這是我的代碼:不能使用日期addHours()

var start_temp = $('#start-datetime').val() 
var start = new Date(start_temp.toString('dd/MM/yyyy HH:mm')); 
var currentMin = parseInt(start.toString('mm')); 

if (currentMin > 0 && currentMin < 15) 
    start.set({ 'minute': 15 }); 
else if (currentMin > 15 && currentMin < 30) 
    start.set({ 'minute': 30 }); 
else if (currentMin > 30 && currentMin < 45) 
    start.set({ 'minute': 45 }); 
else 
    start.addHours(1).set({ 'minute': 0 }); 

$('#start-datetime').val(start.toString('dd/MM/yyyy HH:mm')); 

怎麼可以看到我得到的開始日期在我的文本框start-datetime這是先前填寫約會的信息。但現在這並不重要。
稍後我將此值傳遞給start變量,轉換爲日期對象並設置日期的格式。但是,我得到這個:

無效的日期

如果我打印:$('#start-datetime).val()我得到:

20/11/2015 12:15

什麼時我做錯了?

JSFIDDLE

+1

? Date.toString('mask')是非標準的並且會返回整個日期 –

+0

您不必使用toString方法,您必須將其轉換爲ISO格式,編寫na回答 – godzsa

+0

我使用Date.js和我也有moment.js,但我沒有在這種特殊情況下使用momen.js – Dillinger

回答

2

由於您使用Date.js請採取Date.parse

var start = Date.parse($('#start-datetime').val()); 

或moment.js

// this creates a moment object (PARSED) 
var start = moment($('#start-datetime').val());  
var start_string = start.format('dd/MM/yyyy HH:mm'); 
+2

Infact,似乎.toString()打破了代碼或類似的東西。無論如何,你的提示似乎工作正常。 – Dillinger

+0

toString is unnecessery – godzsa

-1

我想可能是這一行的優勢:

var start = new Date(start_temp.toString('dd/MM/yyyy HH:mm')); 

start_temp只是一個字符串(在第1行中由jQuery.val()返回)。我非常確定,在它上面調用.toString('dd/MM/yyyy HH:mm')實際上並沒有做任何事情,只需要返回原始字符串即可。那麼會發生什麼是:

new Date('20/11/2015 12:15') 

而這不是一個有效的日期格式。我不是那麼熟悉Date.js,但也許你打算使用'dd/MM/yyyy HH:mm'作爲new Date()的第二個參數,而不是toString()的第一個參數?

+0

您是否在發佈之前嘗試過?這是tottaly錯誤 – godzsa

+0

我測試了我說的,是的。也許你誤會了。我給出的代碼示例說明了OP的代碼在做什麼,而不是正確的代碼應該是什麼。 '$('#start-datetime')。val()'將返回一個字符串。調用'.toString([anything])'就可以讓你回到完全相同的字符串,因爲@ abc123的回答似乎支持你的評論。然後,OP的代碼然後調用'new Date()',傳入該字符串(正如他們所說的那樣「2015/11/15 12:15」)。返回「無效日期」。我說「也許」他們可以嘗試第二個參數到'new Date()',我沒有保證它會工作。 –

0

這是一個沒有任何庫的方法。

https://jsfiddle.net/st77vyLg/1/

//read the string 
var start_temp = document.getElementById('start-datetime').value.split('/'); 
//get the data out of it 
day=start_temp[0]; 
month=start_temp[1]; 
start_temp=start_temp[2].split(" "); 
year=start_temp[0]; 
start_temp=start_temp[1].split(":"); 
hour=start_temp[0]; 
minute=start_temp[1]; 
//make a date variable 
var start = new Date(year,month,day,hour,minute); 
alert(start); 
您正在使用什麼其他圖書館
+0

你仍然需要jQuery的第一行 - 或將其更改爲'var start_temp = document.getElementById('start-datetime')。value.split('/');' –

+0

是的,對,我會改變 – godzsa