我想将datetime“31-12-2018 19:30 hs”的格式从阿根廷转换为utc时间戳,我使用以下代码:
$clean_date = substr($date, 0, -4);
$dt = new DateTime($clean_date, new DateTimeZone('America/Argentina/Buenos_Aires'));
$dt->setTimeZone(new DateTimeZone('UTC'));
$timestamp = $dt->getTimestamp();
但它不起作用,在数据库中的记录是“0000-00-00:00:00”,但如果我回显$dt,直到有完美的工作和显示utc的日期时间。
有人能帮我吗?谢谢。
1条答案
按热度按时间8zzbczxx1#
这与php无关。只是在mysql中使用了不正确的日期文本格式。a根据文件:
mysql识别
DATETIME
以及TIMESTAMP
以下格式的值:作为字符串
'YYYY-MM-DD HH:MM:SS'
或者'YY-MM-DD HH:MM:SS'
格式。这里也允许使用“宽松”语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符。作为一个字符串,其中没有分隔符
'YYYYMMDDHHMMSS'
或者'YYMMDDHHMMSS'
格式,前提是字符串作为日期有意义。作为一个数字
YYYYMMDDHHMMSS
或者YYMMDDHHMMSS
格式,前提是数字作为日期有意义。1546335960
这可能是最后一种情况,但由于1546年没有33个月的时间,所以数字没有意义。更糟糕的是,许多mysql服务器在默认情况下配置为允许这些错误通过:
如您所见,您只得到了一个警告(需要显式读取)和数据损坏。
如果您将应用程序配置为使用严格模式,您将及时收到正确的错误消息:
请注意,timestamp只是一个普通的英语单词:
特定事件发生时间的数字记录。
它不一定是unix时间的同义词。