5
  1. 我想知道strtotime (php 日期函数)是如何工作的?
  2. 如何将“ 2012 年 9 月 15 日”之类的字符串解析为时间戳
  3. 有没有更好的算法?

我的目的是改变波斯语的这个功能

4

5 回答 5

8

您可以浏览 PHP 的源代码(https://github.com/php/php-src)并搜索功能以查看其实现。

更新

这里是函数strtotime()的算法https://github.com/php/php-src/blob/master/ext/date/php_date.c#L1324

问候!。

于 2012-04-12T08:12:10.963 回答
3

由于strtotime接受英文输入,我建议采用波斯输入:“15 (SOMETHING_PERSIAN) 2012”并替换所需的字符串(我猜你需要一些 RegExp 和 switch 语句)并将其设为“15 (SOMETHING_ENGLISH) 2012”然后将其发送到strtotime

于 2012-04-12T08:06:25.233 回答
3

我想知道 strtotime(php 日期函数)是如何工作的?

去这里:https ://github.com/php/php-src/blob/master/ext/date/lib/parse_date.c

搜索timelib_strtotime

于 2012-04-12T08:13:53.767 回答
3

忘了它,使用 php Intl 扩展。将来将成为 php 核心的一部分。

<?php
    // format
    $format = datefmt_create('fa_IR@calendar=persian', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::TRADITIONAL, 'yyyy/MM/dd HH:mm');

    // time in locale as you wish
    var_dump(datefmt_format($format, time())); // '۱۳۹۱/۰۲/۰۴ ۱۹:۱۵'

如果您想在 i18n 中支持所有语言的波斯语,请支持 ICU 项目。

php 国际扩展

icu-project.org

于 2012-04-23T14:48:53.600 回答
2

实际解析字符串的方法在parse_date.re 的scan()方法中。在那里,您将找到所有strtotime关键字及其行为。

该库包含在https://github.com/derickr/timelib中。

于 2018-05-03T11:35:52.240 回答