strtotime 在将值用作硬编码字符串时不返回值
Posted
技术标签:
【中文标题】strtotime 在将值用作硬编码字符串时不返回值【英文标题】:strtotime doesn't return value while it works with value as hardcoded string 【发布时间】:2015-07-10 16:04:19 【问题描述】:我正在从 excel 中读取一些数据并将它们导入数据库。但是遇到了一个奇怪的问题。除了日期部分,一切都很好。代码部分是:
$dob = $cells[$i][6];
echo $dob.'<br>';
$timestamp = strtotime($dob);
echo 'time- '.$timestamp;
echo 'time2- '.strtotime('01-01-2000');exit;
输出是:
01-01-2000
time- time2- 946677600
我在 excel 文件中使用的值与从输出中看到的 01-01-2000 完全相同。
我不明白为什么 strtotime 函数可以返回硬编码字符串版本的值,但不能返回从 excel 文件中读取的变量?
感谢您的帮助。
解决方案: 如果有人遇到同样的问题,我就是这样处理的。
$dob_temp = $cells[$i][6];
$dob_numbers = preg_replace("/[^0-9]/","",$dob_temp);
$timestamp = strtotime(substr($dob_numbers,0,2).'-'.substr($dob_numbers,2,2).'-'.substr($dob_numbers,4,4));
$dob = date('Y-m-d', $timestamp);
【问题讨论】:
【参考方案1】:您从 excel 文件中检索到的字符串很可能包含一些奇怪的字符 - 例如,破折号而不是连字符会导致 strtotime
出错。
例子:
<?php
$dob = '01―01―2000';
echo $dob.'<br>';
$timestamp = strtotime($dob);
echo 'time- '.$timestamp;
echo 'time2- '.strtotime('01-01-2000');exit;
http://codepad.org/zKIqeHhO
您可能想要清理来自文件的日期或使用类似DateTime::createFromFormat 的东西来传递与字符串内容匹配的格式。
【讨论】:
我试过 DateTime::createFromFormat 但效果不佳,但我会尝试清理或分成子字符串 谢谢帮助。这绝对是性格问题。我什至无法成功获取 substr,所以我不得不清理除数字之外的所有内容。以上是关于strtotime 在将值用作硬编码字符串时不返回值的主要内容,如果未能解决你的问题,请参考以下文章
MFC 工具提示,GetDlgItemText 不返回用于工具提示的文本
Jquery.ajax 将 null 发送到控制器,但使用硬编码的变量