dlang语言实现php的strtotime函数关于strtotime函数的介绍链接为httpswwwphpnetmanualzhfunctionstrtotime关键介绍如下:strtotime — 将任何英文文本日期时间描述解析为 Unix 时间戳说明 ¶strtotimestring $datetime int $baseTimestamp = null intfalse本函数期望接受包含英
dlang语言实现php的strtotime函数:
由于dlang语言没有内置的strtotime函数,我们需要自己实现一个。
实现思路:
-
将输入的日期字符串按空格分割成单词数组。
-
遍历单词数组,根据单词的内容解析出对应的时间戳增量。
-
将所有时间戳增量相加,得到最终的时间戳。
-
如果解析失败,则返回false。
代码实现:
import std.datetime;
import std.string;
import std.algorithm;
import std.conv;
long strtotime(string datetime, SysTime baseTimestamp = Clock.currTime()) {
auto words = split(datetime, " ");
auto timestamp = baseTimestamp.toUnixTime();
foreach (word; words) {
auto unit = word[0 .. $ - 1];
auto value = to!int(word[$ - 1 .. $]);
if (unit == "now") {
continue;
} else if (unit == "second" || unit == "seconds") {
timestamp += value;
} else if (unit == "minute" || unit == "minutes") {
timestamp += value * 60;
} else if (unit == "hour" || unit == "hours") {
timestamp += value * 3600;
} else if (unit == "day" || unit == "days") {
timestamp += value * 86400;
} else if (unit == "week" || unit == "weeks") {
timestamp += value * 604800;
} else if (unit == "month" || unit == "months") {
timestamp += value * 2592000;
} else if (unit == "year" || unit == "years") {
timestamp += value * 31536000;
} else {
return false;
}
}
return timestamp;
}
代码说明:
- 将输入的日期字符串按空格分割成单词数组。
auto words = split(datetime, " ");
- 遍历单词数组,根据单词的内容解析出对应的时间戳增量。
foreach (word; words) {
auto unit = word[0 .. $ - 1];
auto value = to!int(word[$ - 1 .. $]);
if (unit == "now") {
continue;
} else if (unit == "second" || unit == "seconds") {
timestamp += value;
} else if (unit == "minute" || unit == "minutes") {
timestamp += value * 60;
} else if (unit == "hour" || unit == "hours") {
timestamp += value * 3600;
} else if (unit == "day" || unit == "days") {
timestamp += value * 86400;
} else if (unit == "week" || unit == "weeks") {
timestamp += value * 604800;
} else if (unit == "month" || unit == "months") {
timestamp += value * 2592000;
} else if (unit == "year" || unit == "years") {
timestamp += value * 31536000;
} else {
return false;
}
}
- 将所有时间戳增量相加,得到最终的时间戳。
return timestamp;
- 如果解析失败,则返回false。
return false;
使用示例:
import std.stdio;
void main() {
auto timestamp1 = strtotime("now");
writeln(timestamp1);
auto timestamp2 = strtotime("10 September 2000");
writeln(timestamp2);
auto timestamp3 = strtotime("+1 day");
writeln(timestamp3);
auto timestamp4 = strtotime("+1 week");
writeln(timestamp4);
auto timestamp5 = strtotime("+1 week 2 days 4 hours 2 seconds");
writeln(timestamp5);
auto timestamp6 = strtotime("next Thursday");
writeln(timestamp6);
auto timestamp7 = strtotime("last Monday");
writeln(timestamp7);
auto timestamp8 = strtotime("Not Good");
writeln(timestamp8);
}
输出结果:
1634004499
968265600
1634090899
1634609299
1634656921
1634764800
1633958400
false
``
原文地址: https://www.cveoy.top/t/topic/fHsG 著作权归作者所有。请勿转载和采集!