Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

CFML dates - not getting what I excpected

Posted on 2013-01-31
11
Medium Priority
?
215 Views
Last Modified: 2013-02-03
The following code yields;

tmdate1=*20130131.txt*

tmdate2=*20130131*
tmdate=*57014/06/04*
d:\inetpub\wwwroot\tat.net\development\control\phonedata\CallData_20130131.txt
57014/06/04

The asterisks are just for marking the output and looking for spaces.

<cfset tmdate1="#trim(right(attributes.filename,12))#">
<br>
<cfoutput>
tmdate1=*#tmdate1#*
<br><br>
<cfset tmdate2="#trim(left(tmdate1,8))#">
tmdate2=*#tmdate2#*
<br>
<cfset tmdate = "#dateformat(trim(tmdate2),'yyyy/mm/dd')#">
tmdate=*#tmdate#*
</cfoutput>
<br>
<cfoutput>#attributes.filename#</cfoutput><br>
<cfoutput>#dateformat(left(right(attributes.filename,12),8),"yyyy/mm/dd")#</cfoutput>

Open in new window

0
Comment
Question by:lantervj
  • 5
  • 4
  • 2
11 Comments
 
LVL 36

Accepted Solution

by:
SidFishes earned 2000 total points
ID: 38841471
You can't pass 20130131 to date format as it interprets it as a numerical date value (I think)


try this (with a regex shortcut thrown in as a bonus :)

<cfset tmdate=rereplacenocase(attributes.filename, "[^\d]", "", "all")>
<cfset tmdate= "#left(tmdate, 4)#,#mid(tmdate,5,2)# , #right(tmdate,2)#">
#dateformat(tmdate, "yyyy/mm/dd")#

This works as long as the dates are always 8 chars long (ie: not 2013131)
0
 

Author Comment

by:lantervj
ID: 38841577
Works great.  I'd like to know why, but can't stop and play now.
0
 

Author Closing Comment

by:lantervj
ID: 38841579
Great
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 36

Expert Comment

by:SidFishes
ID: 38841638
why is pretty simple

cf doesn't recognize it as a date

#isdate(tmdate)# returns NO

And often when cf doesn't understand format related things, it guesses....

and you get weird results.
0
 

Author Comment

by:lantervj
ID: 38841662
So, your advice to me is;  Stop doing that?
0
 
LVL 52

Expert Comment

by:_agx_
ID: 38841890
> I'd like to know why, but can't stop and play now.

When you pass in something that looks like a number, ie "20130131" DateFormat treats it as the numeric representation of a date (similar to Excel).  That's different than interpreting the string as yyyymmdd.  With numeric dates:

 - 0 is the date 12/30/1899
 - 3 is the date 01/02/1900  (ie 12/30/1899 + 3 days)
- ...
- 20130131 is the date 06/04/57014 (ie 12/30/1899  + 20130131  days)

His code converts your string into something DateFormat recognizes as a date string.
0
 
LVL 52

Expert Comment

by:_agx_
ID: 38841942
Oops... didn't see the other replies before posting.

Like Sid said, CF does a lot of guessing - which is both good and bad. It makes for simpler code,  but if you don't understand *how* it guesses, you're in for a lot of headaches and unexpected results. Especially with dates.  

(Edit) Unfortunately part of the flexibility is that CF doesn't ask how it should parse date strings.  It just examines the input and takes its best guess.  The standard date functions can make sense of most U.S. date strings, but the safest bet is to stick with the non-ambiguous: yyyy-mm-dd format.
0
 

Author Comment

by:lantervj
ID: 38842323
My life has been a living hell since 12/31/1999.   But, I get it.  I really do.  I just FORget it sometimes.  I rely on you guys to remind me.
0
 
LVL 52

Expert Comment

by:_agx_
ID: 38847874
No worries, happens to me too. We don't always notice the names of who's asking or remember their complete background.  So sometimes we may repeat stuff you already know. But I figure it's better to answer the question asked, than not, and let the asker ignore bits they already know.  Nothing worse than taking the time to ask a question and having someone ignore it.  (That's my personal pet peeve :)
0
 

Author Comment

by:lantervj
ID: 38847995
Me too.  I didn't really mean anything by it.  I'm an old fart and thought I was through before y2k.  :)
0
 
LVL 52

Expert Comment

by:_agx_
ID: 38848975
Haha, if only. There's still the fun of daylight savings time changes and conflicting character encoding issues to play with. Just in case we weren't having enough fun ;-)
0

Featured Post

[Webinar] Cloud Security

In this webinar you will learn:

-Why existing firewall and DMZ architectures are not suited for securing cloud applications
-How to make your enterprise “Cloud Ready”, and fix your aging DMZ architecture
-How to transform your enterprise and become a Cloud Enabler

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Hi, Even though I have created this Tutorial on My personal Blog, Some people might not able to find my website, So here i am posting it again Today, from the topic it is very clear that i will be showing you here the very basic usage of how we …
I spent nearly three days trying to figure out how incorporate OAuth in Coldfusion for the Eventful API. Hopefully, this article will allow Coldfusion Programmers to buzz through the API when they need to. Basically, what this script does is authori…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…

963 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question