手机端修改的文件被认为是最新创建的文件

iphone和win电脑是通过remotely save同步到onedrive中的。电脑端用dataview调用当天创建的笔记时,会发现iphone端修改过的笔记被记录为新创建的笔记,用dataview调用那些修改过的笔记的创建日期cday,发现也会被修改为修改日期mday。而用win端修改的笔记,其创建日期不会发生改变。请问各位大神这个问题怎么解决?


遇到的问题

仔细叙述你的问题。最好附上自己使用的 Obsidian 版本及环境。

预期的效果

你认为没有问题时应该是怎样的。这里最好描述你的本质需求,而非解决方案。比如渴了是需求,但研究出一杯饮料来解渴并不是需求。

已尝试的解决方案

尝试了怎样的解决方法,为什么行不通等等。

貌似这不是obsidian的锅,是操作系统和同步的锅。

多平台无法保证创建时间不变,比如你a电脑的文件,通过云同步服务器b,再同步到目标电脑c,那么,同步到b服务器时,可能创建时间就变成了同步时的时间,再到c同样道理。然后修改后再同步回a电脑,又来一遍反向流程,更何况服务器b中可能有中间件,分布式存储等,无法保证创建时间不变。

但大多数同步软件会尽力保证元数据不变(包括创建时间等),但这只是尽力和理论上,受操作系统的限制,不能保证元数据得到保留。但remotely save应该不可以,具体要问作者大大了,尤其是iPhone这么封闭的系统。

建议通过frontmatter里增加create字段,然后配合模板来实现。

1 个赞

确实如楼上所说。如果需要很准确的元信息,最好通过明显的方式直接写入文件里,而不是跟着属性文件走。

谢谢!我两端的数据实际上是手动上传的,基本上算是实时,不存在跨日期的问题,但每次手机端隔天的修改,其两端的cday都会被修改为新的日期,很奇怪。

另外您说写道元数据里面,我元数据中有date数据,直接用templater调用创建日期,也可以手动更改,您知道这个数据在dataview中如何调用吗来替换file.cday?我的dataview如下:

list file.folder
where file.cday = date("<% tp.file.title %>")
sort file.ctime asc

谢谢您,按您二位所说的解决方式我理解,就是不太会调用,具体问题我回复楼上的内容中有,也请您不吝赐教,非常感谢!

另外,我在想,会不会是我手机端哪里设置的问题,想着能否重新建一个库,将之前库中内容拷贝进新库里面,用这个方法来解决。不知道会不会所有的元数据比如创建日期、修改日期都随之改变了。

dataview中去掉file即可,假设你frontmatter里的字段名是cday,那就如下

list file.folder
where cday = date("<% tp.file.title %>")
sort file.ctime asc

非常感谢,弄明白了 :+1: