2012-07-05 17 views
12

Javascript definitivamente no es mi punto más fuerte. He estado intentando esto por un par de horas y parece que estoy atascado con el formato de fecha en alguna parte.¿Cómo agregar semanas hasta la fecha utilizando javascript?

Tengo un formulario donde un usuario selecciona una fecha (dd/mm/aaaa) y luego esta fecha se tomará y se le agregarán 2 semanas y luego la fecha se copiará a otro campo de formulario.

Mi último intento a continuación ni siquiera agrega una fecha solo copiando la fecha seleccionada en un campo de formulario a otro, si selecciono '03/02/2012 ', arroja' Fri Mar 02 2012 00:00: 00 GMT + 0000 (GMT Standard Time) ', por lo que su salida en formato estadounidense, así como la fecha completa. ¿Cómo puedo ponerlo en el mismo formato y agregar 2 semanas?

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    document.frmAccept.acceptLicence.value = date1; 

} 
+0

me gusta [que ans] (http://stackoverflow.com/a/7751977/1509853) – oCcSking

Respuesta

3

Usted está asignando date1 para ser un objeto Date, que representa la cadena que se pasa. Lo que está viendo en el valor acceptLicense es la representación toString() del objeto de fecha (intente con alert(date1.toString()) para ver esto).

Para imprimir como desee, deberá usar la concatenación de cadenas y el various Date methods.

var formattedDate = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 

En términos de agregar 2 semanas, debe agregar 14 días a la fecha actual;

date1.setDate(date.getDate() + 14); 

... esto va a manejar de forma automática el mes incremento etc.

Al final, usted va a terminar con;

var date1 = new Date(acceptCompletionDate); 
date1.setDate(date1.getDate() + 14); 
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 

N.B Meses en JavaScript son indexada 0 (enero = 0, Dec = 11), de ahí el +1 en el mes.

Editar: Para hacer frente a su comentario, usted debe construir date de la siguiente manera en su lugar, como el argumento Date se supone que es "Una cadena que representa un RFC2822 o ISO 8601 la fecha." (see here).

var segments = acceptCompletionDate.split("/"); 
var date1 = new Date(segments[2], segments[1], segments[0]); 
+0

Gracias por su respuesta, si selecciono '04/01/2012' (dd/mm/yyyy) el valor que obtengo en el otro campo es '15/4/2012 '(dd/mm/aaaa) por lo que parece que aún se suman 14 al mes en lugar del día, o más El formato todavía está mal en alguna parte. – JBoom

+0

Supongo que necesita formatear de alguna manera antes de que se agreguen los 14 días? ya que (date1.getDate() + 14) asume que está formateado como mm/dd/aaaa – JBoom

+0

@JBoom: el argumento 'Fecha' se supone que es 'Una cadena que representa una fecha RFC2822 o ISO 8601'. ([ver aquí] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse)). Podría ser mejor usar el otro constructor que acepta año, mes, día como parámetros separados (ver mi respuesta editada). – Matt

0

Esto debería hacer lo que usted está buscando.

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    date1.setDate(date1.getDate() + 14); 
    document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 
} 
42

Usted puede hacer esto:

var now = new Date(); 
now.setDate(now.getDate()+14); 
alert(now); 

Se puede ver el violín here.

De acuerdo con el método documentation in MDN

El setDate() Establece el día del mes de la fecha especificada de acuerdo con la hora local.

+0

@Jasper - ¿me puede dar un ejemplo que falla? He dado un enlace al código en mi respuesta. –

-1

Todo es there!

date1.toLocaleDateString() 

Thiswill que volver fecha1 como una cadena en la convención cliente

Para crear un nuevo fecha2 día con 2 semanas más (2weeks = 2 * 7 * 24 * 60 * 60 segundos):

var date2 = new Date(date1 + 60*60*24*7*2); 
+0

Eso es lo que ['toLocaleDateString'] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.6) ** debería ** hacer, pero no en todos los navegadores (p. Ej., Chrome ignora la configuración de mi sistema, al igual que las versiones recientes, pero no la versión actual, de Firefox). – RobG

0

Para analizar el formato específico dd/mm/yyyy y aumentar los días con 14, puede hacer algo así como dividir las partes y crear el objeto de fecha con y/m/d dado específicamente. (Incrementando los días de inmediato) Proporcionar el separador es siempre -, el siguiente debería funcionar:

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var parts = acceptCompletionDate.split("/"); 
    var date1 = new Date(parts[2], (parts[1] - 1), parseInt(parts[0]) + 14); //month 0 based, day: parse to int and increment 14 (2 weeks) 
    document.frmAccept.acceptLicence.value = date1.toLocaleDateString(); //if the d/m/y format is the local string, otherwise some cusom formatting needs to be done 

} 
0

Sólo algunas modificaciones mínimas para la respuesta de pan tostado y obtendrá el formato exacto que está buscando dd/mm/aaaa:

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    date1.setDate(date1.getDate() + 14); //This adds the two weeks 

    var day = date1.getDate() 9 10 ? date1.getDate() : '0' + date1.getDate(); 
    var month = date1.getMonth() >= 9 ? date1.getMonth() + 1: '0' + date1.getMonth(); 

    document.frmAccept.acceptLicence.value = day + '/' + month + '/' + date1.getFullYear(); 
} 
Cuestiones relacionadas