Tengo una entrada definida como
<input class="datepicker" type="text" ng-model="clientForm.birthDate" />
Que está preparado para mostrarse en otra parte de la página:
<tr>
<th>Birth Date</th>
<td>{{client.birthDate|date:'mediumDate'}}</td>
</tr>
Cuando se carga la página, la fecha de nacimiento tiene un bonito formato similar a Dec 22, 2009
. Sin embargo, cuando miro dentro de mi, <input>
se muestra como Tue Dec 22 2009 00:00:00 GMT-0800 (Pacific Standard Time)
, supongo, cómo JS representa los Date
objetos como cadenas.
En primer lugar, ¿cómo le digo a Angular que muestre la fecha en el <input>
como algo así 12/22/2009
? Parece que no puedo aplicar |filters
dentro del ng-model
atributo.
En segundo lugar, tan pronto como edito la fecha, incluso manteniéndola en su formato original, mi otro texto (dentro de <td>
) ya no parece aplicar el |date
filtro; de repente cambia de formato para que coincida con el del cuadro de texto de entrada. ¿Cómo hago para que aplique el |date
filtro cada vez que cambia el modelo?
Preguntas relacionadas:
Date()
funciones js estándar :$scope.departDate = new Date(); $scope.departTime = $scope.departDate.toTimeString().slice(0, 5);
y no es necesario en otros filtros o soluciones difíciles en AngularJS IMO.Respuestas:
Utilice la validación personalizada de formularios http://docs.angularjs.org/guide/forms Demostración: http://plnkr.co/edit/NzeauIDVHlgeb6qF75hX?p=preview
Directiva que utiliza formateadores y analizadores y MomentJS )
fuente
var dateFormat = attrs.moMediumDate;
y novar dateFormat = attrs.moDateInput;
moMediumDate no parece estar configurado en ningún lugar, por lo que si las entradas no se crean dinámicamente, nunca se selecciona un formato inicial.Aquí hay una directiva angular-datetime muy útil . Puedes usarlo así:
También agrega máscara a su entrada y realiza la validación.
fuente
datetime="<format>"
valor del atributo coincida con el formato especificado en ladateFormat
opción Datepicker .input[type="date"]
Creé una directiva simple para permitir que los elementos de formulario estándar funcionen correctamente con AngularJS ~ 1.2.16.Mira aquí: https://github.com/betsol/angular-input-date
Y aquí está la demostración: http://jsfiddle.net/F2LcY/1/
fuente
Estoy usando jquery datepicker para seleccionar la fecha. Mi directiva lee la fecha y la convierte al formato de fecha json (en milisegundos), almacena en
ng-model
datos mientras muestra la fecha formateada.Código HTML:
Directiva angular:
fuente
element.datepicker
conelement.pickadate
Dado que ha utilizado datepicker como clase, supongo que está utilizando un datepicker de Jquery o algo similar.
Hay una manera de hacer lo que pretendes sin usar moment.js en absoluto, simplemente usando solo las directivas datepicker y angularjs.
He dado un ejemplo aquí en este violín.
Extractos del violín aquí:
Datepicker tiene un formato diferente y el formato angularjs es diferente, es necesario encontrar la coincidencia adecuada para que la fecha esté preseleccionada en el control y también se complete en el campo de entrada mientras el modelo ng está vinculado. El siguiente formato es equivalente al
'mediumDate'
formato de AngularJS.La directiva de entrada de fecha debe tener una variable de cadena provisional para representar la forma de fecha legible por humanos.
La actualización en diferentes secciones de la página debe ocurrir a través de eventos, como
$broadcast
y$on
.El uso de filter para representar la fecha en forma legible por humanos también es posible en ng-model pero con una variable de modelo temporal.
fuente
¡Utilizo la siguiente directiva que me hace muy feliz a mí y a la mayoría de los usuarios! Utiliza el momento para analizar y formatear. Se parece un poco al de SunnyShah, mencionado anteriormente.
En mi forma lo uso así:
Esto vinculará una marca de tiempo (milisegundos desde 1970) a
doc.begin
ydoc.end
.fuente
ngModel
encuentra su identificador personalizado para el argumento del controlador, no una referencia directa con nombre angModel
. Este es un lugar donde la convención de nombrar ese argumento 'ctrl' o 'controlador' mantiene las cosas más claras y evita confusiones.En Angular2 + para cualquier persona interesada:
con tipo de filtros en DatePipe Angular.
fuente
Prefiero que el servidor devuelva la fecha sin modificaciones y que javascript haga la vista de masaje. Mi API devuelve "MM / DD / YYYY hh: mm: ss" de SQL Server.
Recurso
Controlador
Directiva de validación myDate
HTML
template / validation / messages.html
fuente
Angularjs ui bootstrap puede usar angularjs ui bootstrap, también proporciona validación de fecha
en el controlador puede especificar cualquier formato que desee para mostrar la fecha como filtro de fecha
$ scope.formats = ['dd-MMMM-aaaa', 'aaaa / MM / dd', 'dd.MM.yyyy', 'shortDate'];
fuente