Как работает алгоритм strtotime (функция PHP Date)?

  1. Я хочу знать, как работает strtotime (функция даты php)?
  2. как разобрать строку Like "15 сентября 2012" на отметку времени
  3. есть ли лучший алгоритм?

моя цель - изменить эту функцию для персидского языка


person Hamid Reza Salimian    schedule 12.04.2012    source источник
comment
Вот stackoverflow.com/a/1268380 реализация Java, но не знаю, взята ли она непосредственно из исходного кода PHP функция strtotime.   -  person Lobo    schedule 12.04.2012


Ответы (5)


Вы можете просмотреть исходный код PHP ( https://github.com/php/php-src) и функцию поиска увидеть его реализацию.

ОБНОВЛЕНИЕ

Вот алгоритм работы функции strtotime() https://github.com/php/php-src/blob/master/ext/date/php_date.c#L1324

С Уважением!.

person Lobo    schedule 12.04.2012
comment
Вместо ссылки на master (которая со временем изменится и сломает вашу ссылку) здесь вместо этого ссылка на тег 5.3.23. Это не изменится. github.com/php/ php-src/blob/php-5.3.23/ext/дата/ - person Mark E. Haase; 03.04.2013

так как strtotime принимает ввод на английском языке, я бы рекомендовал взять ввод на персидском языке: "15 (SOMETHING_PERSIAN) 2012" и заменить требуемую строку (наверное, вам нужно какое-то RegExp и оператор switch) и сделать так, чтобы "15 (SOMETHING_ENGLISH) 2012" и ЗАТЕМ отправить его на strtotime

person Adi    schedule 12.04.2012
comment
проблема в том, что я хочу изменить что-то вроде فروردین 12 2004 на ex 2004/6/12 - person Hamid Reza Salimian; 12.04.2012
comment
используя RegExp, вы найдете эту строку и замените ее соответствующим английским эквивалентом - person Adi; 12.04.2012
comment
персидский язык сложнее.... я предпочитаю переписать эту функцию.... - person Hamid Reza Salimian; 12.04.2012

Я хочу знать, как работает strtotime (функция даты php)?

Перейдите сюда: https://github.com/php/php-src/blob/master/ext/date/lib/parse_date.c

Найдите timelib_strtotime.

person jon    schedule 12.04.2012
comment
Исходный файл состоит из 25 000 строк и явно создан с помощью инструмента, похожего на yacc/bison. Хотя он может быть адекватным в качестве рабочей реализации, он бесполезен в качестве любого ресурса для изучения того, как это делается на самом деле. - person markt1964; 07.11.2017
comment
Я пытался заглянуть в этот исходный код, и мне показалось, что бездна смотрит на меня. - person baldrs; 12.03.2018

забудьте об этом, используйте расширение 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())); // '۱۳۹۱/۰۲/۰۴ ۱۹:۱۵'

поддержите проект ICU, если вы хотите поддерживать персидский язык в i18n для всех языков.

международное расширение php

icu-project.org

person sweb    schedule 23.04.2012

Метод, который фактически анализирует строку, находится в метод scan() от parse_date.re. Там вы найдете все strtotime ключевые слова и их поведение.

Эта библиотека включена из https://github.com/derickr/timelib.

person Tim Trinidad    schedule 03.05.2018