我使用jquery datepicker插件获取From日期和To date。以下是POST的输出。
Array (
[fromDate] => 01/03/2012
[toDate] => 15/03/2012
[hdnDownload] => Download
)
我正在尝试将此日期格式转换为另一种日期格式:
echo'fromdate'.$fromDate = date("Y/n/j", strtotime($_POST['fromDate']));
echo'todate'.$toDate = date("Y/n/j", strtotime($_POST['toDate']));
它给了我以下输出:
fromdate: 2012-1-3
todate:1969-12-31
fromDate很好,但是ToDate已经改变了,请你帮帮我。
答案 0 :(得分:2)
您应该使用DateTime::createFromFormat()
:
php > $date = DateTime::createFromFormat('i/n/Y', '15/03/2012');
php > echo $date->format('Y/n/j');
// 2012/3/11
这很有用,因为您可以指定输入格式。 xx/yy/YY
可以表示为i/n/Y
和n/i/Y
,因此日期不明确=>不可预测的行为。
答案 1 :(得分:2)
如果你使用的是PHP> = 5.3.0,那么你需要确保获得正确的结果是DateTime::createFromFormat(),或者当你使用PHP> = 5.1.0时{}} strptime()可以指定输入格式。
虽然如果您仍然希望允许自由格式,那么您可能需要制作一个拐杖,这将使用正则表达式检查此特定格式,并将其中一个仅用于美国m / d / Y,例如:
function parsedate($date) {
if (preg_match('#\d{1,2}/\d{1,2}/\d{2,4}#', $date)) {
$parsed = strptime($date, '%m/%d/%Y');
return mktime(0, 0, 0, $parsed['tm_mon'], $parsed['tm_mday'], 1900+$parsed['tm_year']);
// 'tm_year' is years since 1900
} else {
return strtotime($date);
}
}
它仍然是一个拐杖,但我看不到更清洁的方式。
答案 2 :(得分:0)
strtotime()
会产生意外结果。您的$_POST['toDate']
似乎无法使strtotime
正常运行。
您获得的日期是您所在时区的Unix Time的开始日期。
答案 3 :(得分:0)
fromDate也是错误的,因为你希望03不是1月。
在你的情况下,strtotime认为输入是月/日/年,而15不是一个月它会搞砸。
您可以将输入字符串交换为
[fromDate] => 03/01/2012
[toDate] => 03/15/2012
或在@Vyktor的回答中使用createFromFormat。