2 回答

TA貢獻1780條經驗 獲得超5個贊
IntlDateFormatter 的日期格式錯誤,您需要ICU 格式。
最好使用常量而不是整數。
$dateStr = '2019-09-18 18:58:08';
$t = new \IntlDateFormatter('en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Shanghai' ,IntlDateFormatter::GREGORIAN, 'yyyy-MM-dd HH:mm:ss');
$t->setLenient(false);
$timestamp = $t->parse($dateStr);
//turn timestamp back to string
$dateStrFromTs = date_create(null,new \DateTimeZone('Asia/Shanghai'))
->setTimestamp($timestamp)
->format('Y-m-d H:i:s')
;
var_dump($dateStrFromTs === $dateStr); //bool(true)

TA貢獻1878條經驗 獲得超4個贊
首先,讓我們擺脫幻數和間接檢查,以確保:
$t = new \IntlDateFormatter(
'en_US',
IntlDateFormatter::MEDIUM,
IntlDateFormatter::MEDIUM,
new DateTimeZone('Asia/Shanghai'),
IntlDateFormatter::GREGORIAN,
'Y-m-d H:i:s');
$t->setLenient(false);
$timestamp = $t->parse('2019-09-18 18:58:08');
var_dump(date('r', $timestamp));
這打印 Fri, 18 Jan 2019 11:09:00 +0100. 那么,有什么關系呢?
問題是最后一個構造函數參數。您理所當然地認為格式代碼與 eg 中的相同,date()但這不是文檔所說的:
格式化或解析時使用的可選模式??赡艿哪J接涗浽?? http://userguide.icu-project.org/formatparse/datetime。
Y
表示“一年中的一周”。m
表示一小時內的分鐘。
... 等等。
- 2 回答
- 0 關注
- 182 瀏覽
添加回答
舉報