你如何展示" mm / dd / yyyy"而不是" 12/31/1969"在date为null时的日期输入字段?

时间:2015-11-24 19:41:23

标签: javascript angularjs date angular-ui-bootstrap

基本上我的数据库中有一个日期类型的列,但可以为null。我有一个使用Angular / Bootstrap的表单,允许用户输入日期,如果他们愿意,但他们不需要,为此我使用Bootstraps表单控件类并为输入提供一种日期。

当表单加载日期的空值时,第一次保存所有内容。数据库保存得很好,一切都很好。但是当我将记录加载到此表单中时,如果数据库显示空值,则Angular / Javascript将其显示为12/31/1969而不是" mm / dd / yyyy"就像它最初加载空值时一样。这会导致问题,因为如果用户保存此表单,则会将默认的12/31/1969作为实际日期并将其保存为输入。

我已通过控制台跟踪它,并且我100%肯定日期值为null(enter image description here)当它到达我的模型绑定时所以我无法想到在这种情况下该做什么,我真的很感激任何指针。

拉数据:

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

在视图中:

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

2 个答案:

答案 0 :(得分:5)

Angular需要有input[date]有效 javascript Date对象,否则默认为空字符串,默认为12/31/1969 。 Javascript Date个对象必须始终具有有效的Date

如果您希望能够使用可为空的Date对象,则应将默认属性设置为undefined,然后在绑定模型时,可以查看它是否为null { {1}}首先,如果是,则不执行任何操作。

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" />

答案 1 :(得分:-1)

像isherwood说的那样,如果没有一些代码上下文,这个问题就很难回答。如果添加了一些问题,我会更新我的问题。

在代码中的某处,您必须格式化日期。如果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+中使用此方法。