Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ColdFusion createdate()_Date_Coldfusion - Fatal编程技术网

ColdFusion createdate()

ColdFusion createdate(),date,coldfusion,Date,Coldfusion,我正在学习ColdFusion函数CreateDate。但是,当我使用CreateDate时,值输出是不同的。我的意思是它每月都在变化 <cfoutput> <cfset txtBirthDate='07-10-1983'> <cfset valueOf_txtBirthDate = dateFormat(CreateDate(Year(txtBirthDate),Month(txtBirthDate),Day(txtBirthDate)),'YYYY-MMM-D

我正在学习ColdFusion函数
CreateDate
。但是,当我使用CreateDate时,值输出是不同的。我的意思是它每月都在变化

<cfoutput>
<cfset txtBirthDate='07-10-1983'>
<cfset valueOf_txtBirthDate =  dateFormat(CreateDate(Year(txtBirthDate),Month(txtBirthDate),Day(txtBirthDate)),'YYYY-MMM-DD')>

#txtBirthDate#<br/><br/>
#valueOf_txtBirthDate#<br/>
</cfoutput>

#TXT出生日期#

#出生日期的值
txtbirchdate的值为07-10-1983,但是
CreateDate
创建的txtbirchdate的值为1983-7-10。为什么是七月?应该是1983年10月7日(日期)、10日(月份)


格式有问题吗?

因为默认情况下,您的日期是mm/dd/yyyy格式。所以

<cfset txtBirthDate='07-10-1983'>


将由CF读取为1983年7月10日。因此,outout…

您正在以非常复杂的方式使用
createDate()
txtbirchdate
不是日期,因此不应将其用作日期函数(如
year()
month()
等)的输入。使用日期函数时,输入应该已经是日期对象

假设您从字符串
07-10-1983
开始,其中格式为
mm-dd-yyyy

txtBirthDate ='07-10-1983'; // dd-mm-yyyy

// extract the specific date parts from the string
yyyy = listLast(txtBirthDate, "-");
mm = listGetAt(txtBirthDate, 2, "-"); 
dd = listFirst(txtBirthDate, "-");

// create a date object out of those components
birthDate = createDate(yyyy, mm, dd);

// output the date object in human readable format
writeOutput(dateFormat(birthDate, "YYYY-MM-DD"));
(很明显,在真实的代码中,你不会有那些只用来陈述显而易见的事情的注释!)


只能在最后一次输出时使用
dateFormat()
。对于其他日期操作,请使用实际日期对象:
birthDate

您可以使用Java函数执行此操作。 这就是它的工作原理:

<cfset txtBirthDate='07-10-1983' />
<cfset formatter = createObject("java","java.text.SimpleDateFormat") />
<cfset formatter.init("dd-MM-yyyy") />
<cfset birthDate= formatter.parse(txtBirthDate) />

似乎应该这样做:

 <cfset txtBirthDate = '10-7-1983'>
 #DateFormat(txtBirthDate, "MMM, D, YYYY")#

#日期格式(txtbirchdate,“MMM,D,YYYY”)#

请注意,我颠倒了cfset中月和日的位置,使其正确无误。

您可以执行以下简单操作:

txtBirthDate = '07-10-1983'; //dd-mm-yyyy
arrayDate = listToArray(txtBirthDate, '-');
date_birthDate = createDate(arrayDate[3], arrayDate[2], arrayDate[1]);

writeOutput(lsDateFormat(date_birthDate, 'yyyy-mm-dd');

txtbirchdate=CreateODBCDate(“1983-10-07”);
txtbirchdate=LSDateFormat(txtbirchdate,“dd/mm/yyyyy”);
#TXT出生日期#

实际上,ColdFusion会将字符串
07-10-1983
视为日期,因为它是日期的有效格式。尝试运行此代码以验证:
writeDump(isDate('07-10-1983')问题在于ColdFusion错误地解释了日期,假设第一部分是月份,而实际上是日期。因此,OP说明月份和日期不正确的原因。您的解决方案仍然有效,但是您需要交换解析月份和日期的逻辑,否则,他仍然会得到与开始时相同的日期。很好。没有注意到他在年月日工作。我以为他是在用你们这些疯子的方式工作。我已经相应地调整了代码。CF将获取任何旧字符串,并尝试将其转换为[任何]以使其适合给定函数。但是我怀疑如果你给一个日期函数一个字符串,它会首先尝试强制转换一个日期,然后使用这个日期作为参数;而不是实际接受预期日期的字符串。但是,是的,格式为
mm dd yyyy
的字符串将很好地转换为日期。@ScottStroz顺便说一句,
isDate()
返回字符串的
yes
(原文如此)非常烦人。它应该返回
No
。如果函数为
canBeConvertedToDate()
,则当传递字符串时,
Yes
可能是一个有效的答案(显然与有效格式有关)。不过:在CFML中这种情况已经有很长一段时间了:-/我不确定我是否同意。这是一个有效日期。问题是,当你们在池塘边使用的向后日期有第一个元素时,它将是我们在这里使用的格式的有效日期。如果不这样做,解析表单提交中的字符串并将其转换为日期将是一件痛苦的事情。解析表单提交中的日期是值得花费时间和精力的。虽然使用可重用的代码可以减少时间和精力。许多年前,我编写了一些自定义标记,对日期表单字段进行了一些验证。最初,它们仅使用dateformat()返回字符串。我后来修改了它们以返回日期对象。我的动机是观察到,与早期版本相比,ColdFusion的较新版本对不完美编码的容忍度更低。更具体地说,日期字符串将按照“英语(美国)语言环境约定”进行解释/解析,这意味着第一个月ie
mm/dd/yyyy
。恕我直言,这不是一个好方法。字符串被解释为7月10日的原因是,标准CF日期函数总是根据美国惯例(即月初)解释字符串。颠倒月和日数以避免使用设计的功能,这充其量是脆弱的。如果您使用的是“dd-mm-yyyy”字符串,正确的方法是将LS(区分区域设置)日期函数与适当的区域设置一起使用。
<cfscript>
    txtBirthDate=CreateODBCDate("1983-10-07");
    txtBirthDate=LSDateFormat(txtBirthDate, "dd/mm/yyyy");
</cfscript>

<cfoutput>
    #txtBirthDate#
</cfoutput>