2015-11-24 33 views
1

本質上,我在我的數據庫中有一個日期類型的列,但可以爲空。我有一個使用Angular/Bootstrap的表單,允許用戶輸入日期,但他們不需要,因此我使用Bootstraps表單控件類併爲輸入提供日期類型。日期爲空時,如何在日期輸入字段中顯示「mm/dd/yyyy」而不是「12/31/1969」?

當窗體加載日期的空值時,所有工作都會保存第一次。數據庫可以很好地保存它,並且一切都很好。但是,如果數據庫顯示空值,則將數據加載到此表單中時Angular/Javascript將它顯示爲12/31/1969而不是「mm/dd/yyyy」,就像最初使用空值加載時一樣。這會導致一個問題,因爲如果用戶保存此表單,它會將默認的12/31/1969作爲實際日期並將其保存爲輸入。

我已經通過控制檯跟蹤了它,當它遇到我的模型綁定時,我的日期值爲空(enter image description here),所以我無法想象在這種情況下該做什麼,我真的很感激任何指針。

在把數據:

if (myDateFromDatabase !== null) { 
    myDateFromDatabase = new Date(myDateFromDatabase); 
} 

鑑於:

<input ng-model="myDateFromDatabase" type="date" class="form-control" /> 
+0

顯示一些代碼,請。你的問題是脫離主題,否則將被擱置。 – isherwood

+0

更具體地說,我要求的控制器或指令正在做你在你的問題中描述的內容。 – isherwood

+0

這真的聽起來像你得到一個空的字符串(或者甚至0),對'myDateFromDatabase'返回一個'null' ...如果你使'if(myDateFromDatabase!== null && myDateFromDatabase!=='' )'你還能得到那些結果嗎?如果你在'if'塊中放置了一個'debugger',你的控制檯是否落地?我知道你說過你是100%正面的,myDateFromDatabase是null,但你在這裏是爲了第二組眼睛,所以看到證明也不會有什麼傷害。 – ragerory

回答

4

角的需求爲已任input[date]有效的javascript Date對象,否則,它會默認爲空字符串,那麼這將默認爲1969年12月31日。 Javascript Date對象必須始終有效Date

如果你希望能夠使用可空Date對象,你應該默認屬性設置爲undefined,然後當你綁定你的模型,你可以看到,如果它是null第一,什麼也不做,如果它是。

var myDateFromDatabase = undefined; // if you get null back from database, you'll keep this undefined 

然後,當您獲取數據並應用它時...

if (data.dateRetrieved !== null) { 
    // only make myDateFromDatabase an actual date if there is something stored 
    myDateFromDatabase = new Date(data.dateRetrieved); 
} 

併爲您的默認文本,添加placeholder屬性:

<input ng-model="myDateFromDatabase" type="date" placeholder="mm/dd/yyyy" class="form-control" /> 
+0

我會嘗試未定義的方法並報告回來!謝謝。 – IfTrue

+0

謝謝!基本上在空檢查我添加其他{myDateFromDatabase = undefined;}並完美工作。你是一個冠軍ragerory。對於未來看這個佔位符的人來說沒有必要。 – IfTrue

+0

沒問題。很高興你明白了。 – ragerory

-1

像伊舍伍德說,這個問題是很難沒有一些代碼方面來回答。如果添加了一些,我會更新我的問題。

代碼中的某處必須格式化日期。如果JavaScript是從一個日期對象格式化,那麼你只需要像做:

if(some_date === null) 
    some_date = 'mm/dd/yy; 
else { 
    //date formatting code 
} 

如果你的PHP或查詢格式化您的日期,那麼如果你這樣做,例如在前端:

<input ng-attr-value="{{obj.date}}"/> 

然後修改成:

<input ng-attr-value="{{obj.date === null ? 'mm/dd/yyyy' : obj.date}}"/> 

或當你接收到的數據從API回來做類似的事情。

編輯/說明:如果是日期輸入字段,您可能會在角度爲1.3+時使用此方法。

+0

這不會回答問題,並且將日期設置爲字符串'mm/dd/yyyy'會在Angular 1.3+中引發日期格式錯誤,因爲它需要日期對象類型。 – IfTrue

+0

@IfTrue技術上他要求的值是'mm/dd/yyyy',而不是佔位符。在他的問題中,我也沒有太多的例子(他自從加了很多)後,我盡我所能回答了問題。 – csga5000

相關問題