将八位数转换为日期的最有效方法是什么?

Evi*_*mes 3 coldfusion date coldfusion-9

我正在使用ColdFusion 9.0.1和一些我无法改变的数据库.

我正在访问一个数据库,该数据库将日期存储为八位数字,零小数位,如下所示:

YYYYMMDD
Run Code Online (Sandbox Code Playgroud)

我需要能够读取日期,添加和减去日期的天数,并创建新的日期.我正在寻找一个ColdFusion解决方案,以有效(不多的代码)将日期转换为我们的标准格式,即

MM/DD/YYYY
Run Code Online (Sandbox Code Playgroud)

然后将其转换回数据库的格式以便保存.

我需要以这样的方式对此进行编码:非ColdFusion程序员可以轻松地读取并使用它,复制和修改它以用于其他功能(例如向日期添加一天).所以,我不是在寻找最少量的代码,而是高效可读的代码.

您能否提出任何可以使此代码块更灵活,更易读或更高效(更少代码)的内容?

<cfscript>

// FORMAT DB DATE FOR BROWSER
DateFromDB = "20111116";
DatedToBrowser = createBrowserDate(DateFromDB);
writeOutput(DatedToBrowser);

function createBrowserDate(ThisDate) {
    ThisYear = left(ThisDate, 4); 
    ThisMonth = mid(ThisDate, 4, 2);
    ThisDay = right(ThisDate, 2);
    NewDate = createDate(ThisYear, ThisMonth, ThisDay);
    NewDate = dateFormat(NewDate, "MM/DD/YYYY");
    return NewDate;
}

// FORMAT BROWSER DATE FOR DB
DateFromBrowser = "11/16/2011";
DateToDB = createDBDate(DateFromBrowser);
writeDump(DateToDB);

function createDBDate(ThisDate) {
    ThisYear = year(ThisDate); 
    ThisMonth = month(ThisDate);
    ThisDay = day(ThisDate);
    NewDate = "#ThisYear##ThisMonth##ThisDay#";
    return NewDate;
}

</cfscript>
Run Code Online (Sandbox Code Playgroud)

Ton*_*son 6

首先找到谁曾经做过数据库,然后把他们踢进nad ......

我个人用sql转换所以我的代码只处理日期对象.

Select Convert(DateTime, Convert(VarChar(8),DateTimeInventedByIdjitColumn))
From SomeTable
Run Code Online (Sandbox Code Playgroud)

如我们的同行所述,将日期存储为日期.

'08/06/2011'可能是8月6日的8月8日,具体取决于当地情况.

20111643是一个有效的整数..

不使用正确的日期类型只是一大堆功能和错误,最多等待发生.

  • 在SQL阶段进行转换绝对是一个好主意,并且比使用CFML函数更有意义,尽管我认为这里的示例代码假定MS SQL Server?重要的是要注意这一点,因为不同的平台具有不同的转换功能,并且我们不知道OP正在使用哪一个. (2认同)

Sco*_*roz 5

实际上,您可以将每个函数重写为1行代码.

function createBrowserDate(ThisDate) {
  return mid(ThisDate,4,2) & "/" & right(ThisDate,2) & "/" & left(ThisDate,4);
}
Run Code Online (Sandbox Code Playgroud)

function createDBDate(ThisDate) {
  return dateFormat( ThisDate, "YYYYMMDD" );
}
Run Code Online (Sandbox Code Playgroud)