2012-01-25 19 views
17

Quiero que la fecha se vea como MM-DD-YYYY en lugar de MM/DD/YYYY.VBScript ¿Cómo puedo formatear la fecha?

+0

Tenga en cuenta que, en algunos sistemas, se supone que las barras diagonales son de formato estadounidense (m/d/y) y se supone que las rayas son en formato Euro (d-m-y). Por lo tanto, en ciertos casos, cambiar la fecha del estilo estadounidense por rayas puede causar problemas, o al menos confusión. –

Respuesta

33
0 = vbGeneralDate - Default. Returns date: mm/dd/yy and time if specified: hh:mm:ss PM/AM. 
1 = vbLongDate - Returns date: weekday, monthname, year 
2 = vbShortDate - Returns date: mm/dd/yy 
3 = vbLongTime - Returns time: hh:mm:ss PM/AM 
4 = vbShortTime - Return time: hh:mm 


d=CDate("2010-02-16 13:45") 
document.write(FormatDateTime(d) & "<br />") 
document.write(FormatDateTime(d,1) & "<br />") 
document.write(FormatDateTime(d,2) & "<br />") 
document.write(FormatDateTime(d,3) & "<br />") 
document.write(FormatDateTime(d,4) & "<br />") 

Si desea utilizar otro formato que tendrá que crear su propia función y analizar mes, año, día, etc y ponerlos juntos en su formato preferido.

Function myDateFormat(myDate) 
    d = WhatEver(Day(myDate)) 
    m = WhatEver(Month(myDate))  
    y = Year(myDate) 
    myDateFormat= m & "-" & d & "-" & y 
End Function 

Function WhatEver(num) 
    If(Len(num)=1) Then 
     WhatEver="0"&num 
    Else 
     WhatEver=num 
    End If 
End Function 

edición: función añadida para dar formato a día y mes como 0n si el valor es menor que 10.

+1

+1 ¡Esto también me ayudó! Gracias @ stian.net – ckpepper02

10

La salida de FormatDateTime depende de la configuración en Configuración regional en el Panel de control. Por lo tanto, en otros países FormatDateTime (d, 2) puede, por ejemplo, devolver aaaa-MM-dd.

Si desea que su salida sea "cultural invariante", use la solución de stian.net. Si simplemente no les gusta barras en fechas y que no se preocupan por el formato de fecha en otros países, sólo puede utilizar

Replace(FormatDateTime(d,2),"/","-") 
+0

Parece que está diciendo que FormatDateTime (la solución de stian.net) es y no es invariante para la cultura ...? Confundido ... – track0

3

'para los nombres de archivo únicos que utilizo

Dim ts, logfile, thisScript 

thisScript = LEFT(Wscript.ScriptName,LEN(Wscript.ScriptName)-4) ' assuming .vbs extension 

ts = timeStamp 
logfile = thisScript & "_" & ts 

' ====== 
Function timeStamp() 
    timeStamp = Year(Now) & "-" & _ 
    Right("0" & Month(Now),2) & "-" & _ 
    Right("0" & Day(Now),2) & "_" & _ 
    Right("0" & Hour(Now),2) & _ 
    Right("0" & Minute(Now),2) ' '& _ Right("0" & Second(Now),2) 
End Function 
' ====== 
15

sugerimos llamar 'Ahora' solo una vez en la función para protegerse contra el minuto, o incluso el día, cambiando durante la ejecución de la función.

Por lo tanto:

Function timeStamp() 
    Dim t 
    t = Now 
    timeStamp = Year(t) & "-" & _ 
    Right("0" & Month(t),2) & "-" & _ 
    Right("0" & Day(t),2) & "_" & _ 
    Right("0" & Hour(t),2) & _ 
    Right("0" & Minute(t),2) ' '& _ Right("0" & Second(t),2) 
End Function 
0

Aunque se proporciona respuesta que encontraron solución más simple:

Fecha:

01/20/2017 

Haciendo reemplazar

CurrentDate = replace(date, "/", "-") 

Es seria:

01-20-2017 
+0

Según la configuración regional del sistema, es posible que esto no dé como resultado MM-DD-YYYY – Jobbo

0

Este fragmento también resuelve esta pregunta con datePart function. También utilicé el truco right() para realizar un rpad(x,2,"0").

option explicit 

Wscript.Echo "Today is " & myDate(now) 

' date formatted as your request 
Function myDate(dt) 
    dim d,m,y, sep 
    sep = "-" 
    ' right(..) here works as rpad(x,2,"0") 
    d = right("0" & datePart("d",dt),2) 
    m = right("0" & datePart("m",dt),2) 
    y = datePart("yyyy",dt) 
    myDate= m & sep & d & sep & y 
End Function 
Cuestiones relacionadas